变量作用域
作用域是变量的生效范围
作用域是查找变量的工具
1.全局作用域
写在函数外的变量:是全局作用域的变量
例:
$siteName = 'hello';
2.函数作用域
在函数内部使用外部变量的两种方法
1.使用global在函数内部声明一下要使用的外部变量
// 外部定义变量
$siteNAme = 'hello';
function getinfo(){
// 使用globel在函数内部声明一下这个变量实现调用外部变量
global $siteName;
return $siteName;
}
// 调用函数
echo getinfo(); // 输出 hello
2.声明一个超全局数组,在全局中创建的变量会自动成为超全局数组$GLOBALS中的一个元素[叫全局变量]
例:
// 外部定义一个变量
$siteName = 'hello';
function getinfo(){
// 在内部使用超全局数组访问超全局变量
$GLOBALS['siteName']
}
// 调用函数
echo getinfo(); // 输出hello
常量
定义常量的两种方法
1.关键字const 常量名;
例:
const SITE_NAME = 'demo';
2.函数define('常量名','常量值');
例:
define('APP_NAME','管理系统');
get_defined_constants(true)查看系统中预定义的常量
get_defined_constants(true);这里的参数true写上会把系统的预定义常量分类
get_defined_constants(true)['user']查询用户自定义的常量
类中的常量只能用const关键字来定义
例:
class User {
const NAME = '张三';
}
- 注意事项
1.常量前没有$符号
2.常量必须初始化
例:
const NAME = '张三';或define('NAME','张三');
3.常量不予许删除
例:
const NAME = '张三';unset(NAME); // 不被允许
4.常量不受作用域限制
例:
const NAME = '张三';
function getinfo(){
return Name;
}
echo getinfo(); // 输出 "张三"
5.在同一空间内常量不予许重定义[相当于不予许重新赋值]
例:
// 在同一空间下这样是错误的
const APP_PATH = '张三';
const APP_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
namespace ns1 {
const APP_PATH = '/phpstudy_pro';
}
// 命名空间ns2
namespace ns2 {
const APP_PATH = '/public';
// 在命名空间ns2中访问命名空阿ns1中的常量APP_PATH
echo \ns1\APP_PATH;
}
// 访问命名空间中的常量
//在全局空间中访问命名空间中的常量
namespace {
echo \ns1\APP_PATH,"<br>";
echo \ns2\APP_PATH,"<br>";
}
变量过滤器
查看当前php版本支持的预定义过滤器有哪些
foreach (filter_list() as $filter) {
echo $filter . ' => ' .filter_id($filter) . '<br>';
}
// 我的当前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===>1024
- 1.过滤单个变量 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/" }