变量作用域
作用域是变量的生效范围,是查找变量的工具。首先理解几个概念。
- 全局变量:函数外部创建的变量。
- 私有变量:在函数内部创建的叫私有变量
- 全局作用域,写到函数的外部的变量。
- 函数作用域,写在函数内部的变量。在PHP中,函数会创建一个独立的作用域,不能直接访问外部的变量(全局变量)。
函数内部访问外部变量的两种方法
1.在函数内部做一个声明
$siteName='中国网';
function getInfo(){
global $siteName;
return $siteName;
}
2.通过超全局变量$GLOBALS来访问
$siteName='中国网';
function getInfo(){
return $GLOBALS['siteName'];
}
变量过滤器
我们用如下代码可以查看PHP版本支持的预定义过滤器有哪些
foreach (filter_list() as $filter){
echo $filter.'=>'.filter_id($filter).'<br>';
}
过滤单个变量
过滤单个变量使用 filter_var(),用法是filter_var(要过滤的变量,过滤器常量)
先看下面的代码
//判断是否是整数
$age=30;
$age='aaa';
var_dump(filter_var($age,FILTER_VALIDATE_INT));
echo '<br>';
//在一定范围内验证
$ageTwo='500';
$options=['options'=>['min_range'=>18,'max_range'=>60]];
var_dump(filter_var($ageTwo,FILTER_VALIDATE_INT,$options));
echo '<hr>';
//判断是否邮箱
$email='aa@qq.com';
var_dump(filter_var($email,FILTER_VALIDATE_EMAIL));
echo '<br>';
var_dump(filter_var($email,274)); //这个用的ID也可
echo '<hr>';
结果如图
过滤验证多个变量
过滤验证多个变量使用 filter_var_array()
代码如下
$a=10;
$b='php.cn';
var_dump(filter_var_array([$a,$b],FILTER_VALIDATE_INT));
echo '<br>';
$arr=[$a,$b];
var_dump(filter_var_array($arr,FILTER_VALIDATE_INT));
结果如图
过滤外部变量
通常通过HTTP请求发送过来,表单,POST,GET。使用方法:filter_input(输入类型get/post,变量名,过滤器,参数)
代码如下
echo '<hr>';
// echo $_GET['id'].'<br>'; ID是通过URL中的参数传递过来的
$options=['options'=>['min_range'=>1]];
var_dump(filter_input(INPUT_GET,'id',FILTER_VALIDATE_INT,$options));
结果如图:
同时验证多个外部变量
$args=[
'username'=>FILTER_VALIDATE_INT,
'age'=>['filter'=>FILTER_VALIDATE_INT,'options'=>['min_range'=>18,'max_range'=>60]],
'email'=>FILTER_VALIDATE_EMAIL,
'blog'=>FILTER_VALIDATE_URL
];
var_dump(filter_input_array(INPUT_GET,$args));
结果如图:
我们可以看到Email这块是False,因为参数值就不是正确的Email形式。
更多的变量过滤器大家可以查看手册。
PHP常量
查看当前有哪些可用的常量
echo '<pre>'.print_r(get_defined_constants(true),true).'</pre>';//加个true 分组显示
如下图所示
查看用户自定义的常量
echo '<pre>'.print_r(get_defined_constants(true)['user'],true).'</pre>'; //只返回用户自定义的
创建常量的两种方式
两种方式创建常量,关键词const,函数define。 但在类中定义常量只能用const。
常量没有$,不能更新。必须初始化。 常量不可删除,不受作用域限制 常量推荐全部大写,多个单词之间用下划线_隔开
const USERNAME='黄帝';
define('AGE','9999');
class User{
// 类中定义常量只能用const
const USERNAME='炎帝';
// define('age','9999'); //用函数创建则会报错。
}
常量的两种输出方式
echo USERNAME,'<br>';
echo constant('AGE');
两种输出方式的区别
const USERNAME_CHIYOU='蚩尤';
$name='USERNAME_CHIYOU';
echo $name,'<br>'; //显示的是字符串
echo constant($name);//显示的是常量的内容
定义一个特殊常量
define('','aa@qq.com');
echo ''; //显示不出来
echo constant(''); //显示出来了
魔术常量
echo '当前目录:'.__DIR__.'<br>';
echo '当前文件:'.__FILE__.'<br>';
echo '当前行号:'.__LINE__.'<br>';
预定义常量
echo '版本号:'.PHP_VERSION.'<br>';
echo '操作系统:'.PHP_OS_FAMILY.'<br>';
echo '最大整数:'.PHP_INT_MAX.'<br>';
echo '最大浮点数:'.PHP_FLOAT_MAX.'<br>';
echo '目录分割符:'.DIRECTORY_SEPARATOR.'<br>';
总结
目前的知识都是一些概念性的,容易理解。能看到,但具体运用,肯定还需要看笔记。 过滤多个变量这块用到了类,目前还不明白,以后学习到再来消化理解!