变量作用域
作用域是变量的生效范围
作用域是查找变量的工具
1.全局作用域
写在函数外的变量:是全局作用域的变量
例:
$siteName='hello';
2.函数作用域
在函数内部使用外部变量的两种方法
1.使用global在函数内部声明一下要使用的外部变量
// 外部定义变量
$siteNAme='hello';
functiongetinfo(){
// 使用globel在函数内部声明一下这个变量实现调用外部变量
global$siteName;
return$siteName;
}
// 调用函数
echo getinfo();// 输出 hello
2.声明一个超全局数组,在全局中创建的变量会自动成为超全局数组$GLOBALS中的一个元素[叫全局变量]
例:
// 外部定义一个变量
$siteName='hello';
functiongetinfo(){
// 在内部使用超全局数组访问超全局变量
$GLOBALS['siteName']
}
// 调用函数
echo getinfo();// 输出hello常量
定义常量的两种方法
1.关键字const 常量名;
例:
constSITE_NAME='demo';
2.函数define('常量名','常量值');
例:
define('APP_NAME','管理系统');
get_defined_constants(true)查看系统中预定义的常量
get_defined_constants(true);这里的参数true写上会把系统的预定义常量分类
get_defined_constants(true)['user']查询用户自定义的常量
类中的常量只能用const关键字来定义
例:
classUser{
constNAME='张三';
}注意事项
1.常量前没有$符号
2.常量必须初始化
例:
constNAME='张三';或define('NAME','张三');
3.常量不予许删除
例:
constNAME='张三';unset(NAME);// 不被允许
4.常量不受作用域限制
例:
constNAME='张三';
functiongetinfo(){
returnName;
}
echo getinfo();// 输出 "张三"
5.在同一空间内常量不予许重定义[相当于不予许重新赋值]
例:
// 在同一空间下这样是错误的
constAPP_PATH='张三';
constAPP_PATH='李四';预定义常量
预定义常量
作用
PHP_VERSION
查看版本号
PHP_OS_FAMILY
查看操作系统
PHP_INT_MAX
查看最大整数
PHP_FLOAT_MAX
查看最大浮点数
DIRECTORY_SEPARATOR
查看目录分隔符
魔术常量
魔术常量
描述
__LINE__
文件中的当前行号
__FILE__
文件的完整路径和文件名
__DIR__
文件所在目录
__FUNCTION__
当前的函数名称
__CLASS__
当前类名称
__TRAIT__
当前Trait名称
__METHOD__
当前类方法名称
__NAMESPACE__
当前命名空间名称
命名空间
全局成员不允许被重复定义,类与函数也是全局成员,也不允许重复定义
全局成员包括:常量,类[接口属于类的一种],函数
创建命名空间
namespace 空间名 { 内容 } // 当前文件独属于当前这个命名空间时{}可去掉直接 namespace 命名空间名称 即可
创建命名空间:
例:
// 命名空间ns1
namespacens1{
constAPP_PATH='/phpstudy_pro';
}
// 命名空间ns2
namespacens2{
constAPP_PATH='/public';
// 在命名空间ns2中访问命名空阿ns1中的常量APP_PATH
echo \ns1\APP_PATH;
}
// 访问命名空间中的常量
//在全局空间中访问命名空间中的常量
namespace{
echo \ns1\APP_PATH,"
";
echo \ns2\APP_PATH,"
";
}变量过滤器
查看当前php版本支持的预定义过滤器有哪些
foreach(filter_list()as$filter){
echo $filter.' => '.filter_id($filter).'
';
}
// 我的当前php版本7.1.13 输出支持的预定义过滤器
// 左边过滤器名称 ,右边过滤器id
int===>257
boolean===>258
float===>259
validate_regexp===>272
validate_domain===>277
validate_url===>273
validate_email===>274
validate_ip===>275
validate_mac===>276
string===>513
stripped===>513
encoded===>514
special_chars===>515
full_special_chars===>522
unsafe_raw===>516
email===>517
url===>518
number_int===>519
number_float===>520
magic_quotes===>521
callback===>10241.过滤单个变量 filter_var()
filter_var(要过滤的变量, 过滤器常量)
filter_var(要过滤的变量,过滤器常量,对过滤变量的限制)
FILTER_VALIDATE_INT过滤/检测当前变量是否是整数型数值
FILTER_VALIDATE_EMAIL过滤/检测当前变量是否是符合邮箱类型
例:
$age=21;
var_dump(filter_var($age,FILTER_VALIDATE_INT));// 输出int(21);
$ages='23';// 当前变量的值是字符串型数值
var_dump(filter_var($age,FILTER_VALIDATE_INT));// 输出int(23);
`解释:过滤器验证时会自动把过滤变量转换为字符串,所以过滤变量的值为数值型字符串可以如$age='abc'这就直接输出false因为abc不是数值型字符串不能转换为有效数值`
// 给过滤变量添加限制
例:
$ages='23';
// 这里声明一个二位数组来限制过滤变量$age的值 min-range是最小值 max_range是最大值
// 如果过滤的变量超过限制的值也会输出false;
$options=['options'=>['min-range'=>'18','max-range'=>'80']];
// 输出打印过滤变量
var_dump(filter_var($age,FILTER_VALIDATE_INT,$options));// 输出int(23);
// 过滤邮箱
例:
$email='ceshi@qq.com';// 定义一个邮箱格式字符串
var_dump($email,FILTER_VALIDATE_EMAIL);// 输出"ceshi@qq.com"
// 另一种方式可以过滤常量的id代替常量名
var_dump($email,274);// 输出效果和写过滤常量的效果一样 输出"ceshi@qq.com"2.验证过滤多个变量 filter_var_array()
filter_var_array(过滤变量[把所有要过滤的变量放进一个数组在赋值给一个变量],过滤器名称)
例:
$a=10;
$b='80';
// 把所有要过滤验证的变量放进一个数组
$arr=[$a,$b];
// 过滤检测当前数组值是否都是整数型不是的输出false是的直接输出
var_dump(filter_var_array($arr,FILTER_VALIDATE_INT));// 输出结array(2) { [0]=> int(10) [1]=> int(80) }3.过滤验证外部变量filter_input()
filter_input(输入传递方式/get,post,变量名,过滤器,参数)
例:
// 使用GET方式传参来演示外部变量的获取和验证/过滤
$id=$_GET['id'];// 这个id是通过get方式从地址栏中传过来的
$options=['options'=>['min_range'=>1]];// 限制id最小是1
var_dump(filter_input(INPUT_GET,'id',FILTER_VALIDATE_INT,$options));
4.同时验证多个外部变量
filter_var_array(输入传递方式/get,post,过滤数组)
例:
$args=[
'username'=>FILTER_SANITIZE_STRING,
'email'=>FILTER_VALIDATE_EMAIL,
'age'=>['filter'=>FILTER_VALIDATE_INT,'options'=>['min_range'=>18,'max_range'=>60]],
'blog'=>FILTER_VALIDATE_URL
];
// 哪一个不符合直接输出false
var_dump(filter_input_array(INPUT_GET,$args));// 输出 int(9) array(4) { ["username"]=> string(15) "'admin'" ["email"]=> string(12) "ceshi@qq.com" ["age"]=> int(18) ["blog"]=> string(24) "https://www.php.cn/blog/" }