1.变量作用域
变量分为局部变量和全局变量,作用域就是变量的生效范围
1.变量作用域,示例:
$demo = '变量';//全局作用域
function demo()
{
$demo1 = '函数内变量';//函数作用域
}
echo $demo; //输出结果
echo $demo1;//不会打印变量,因其作用域在函数demo内,只能在函数内部使用
2.全局变量,示例:
$demo = '变量';
$demo1 = '变量123';
function demo()
{
// 声明一个全局变量,声明为全局变量才能对外部变量修改
global $demo1;
return $demo1;
}
echo $demo;//输出结果
echo demo();//输出结果
3.超全局变量\$GLOBALS,(\$GLOBALS 是一个预定义的超全局数组,其中包含了全局作用域中的所有可用变量,变量的名字就是数组的键。)
/*global和$GLOBALS 区别:global $var 指的是对函数外部同名变量的引用,是两个互不影响的变量,而 $GLOBALS['var'] 指的是函数外部变量本身。
*/
$demo = '变量';
$demo1 = '变量123';
function demo()
{
return $GLOBALS['demo1'];
}
echo $GLOBALS['demo'];
2.常量
常量类似变量,贯穿整个脚本是自动全局的,但是常量一旦被定义就无法更改,有效的常量名以字符或下划线开头(常量名称前面没有 $ 符号),通常使用大写字母定义常量,不能使用数字开头;
- 常量有2种定义方式:
1.使用const关键字;
2.使用define()函数;- 系统常量,可以使用print_r(get_defined_constants());查看所有系统常量
// const 定义
const DEMO= '常量';
// 函数define定义
define('DEMO1', 'define定义常量');
//类中的常量只能用const定义
class demo{
const DEMO2='类中的常量';
function demo2(){
//在类里面访问定义的类常量用self关键字;self的代表的就是当前类
echo self::DEMO2;
}
}
//类外常量的访问
echo demo::DEMO2;
//constant,返回一个常量的值:
echo constant('DEMO');
// 查询用户自定义的常量
print_r(get_defined_constants(true)['user']);
2.1 预定义常量
| 序号 | 魔术常量 | 描述 |
| —— | —————————- | ————— |
| 1 | PHP_VERSION | 版本号 |
| 2 | PHP_OS_FAMILY | 操作系统 |
| 3 | PHP_INT_MAX | 最大整数 |
| 4 | PHP_FLOAT_MAX | 最大浮点数 |
| 5 | DIRECTORY_SEPARATOR | 目录分隔符 |
2.2 魔术常量
序号 | 魔术常量 | 描述 |
---|---|---|
1 | __LINE__ |
文件中的当前行号 |
2 | __FILE__ |
文件的完整路径和文件名 |
3 | __DIR__ |
文件所在目录 |
4 | __FUNCTION__ |
当前的函数名称 |
5 | __CLASS__ |
当前类名称 |
6 | __TRAIT__ |
当前Trait 名称 |
7 | __METHOD__ |
当前类方法名称 |
8 | __NAMESPACE__ |
当前命名空间名称 |
9 | __FILE__ |
当前文件 |
10 | __DIR__ |
当前目录 |
11 | __LINE__ |
当前行号 |
命名空间(默认情况下,所有常量、类和函数名都放在全局空间下)
//全局成员,不允许重复定义,因此使用命名空间来定义
namespace demo {
const TEST = '第一个命名空间';
}
namespace demo1 {
const TEST = '第二个命名空间';
}
//全局空间: 匿名空间
namespace {
echo \demo\TEST, "<br>";
echo \demo1\TEST, "<br>";
}
变量过滤器
常用的过滤器函数:
序号 | 函数 | 描述 |
---|---|---|
1 | filter_list() |
当前php版本支持的预定义过滤器 |
2 | filter_id() |
返回指定过滤器的 ID 号 |
3 | filter_var() |
过滤单个变量 |
4 | filter_var_array() |
过滤多个变量 |
5 | filter_has_var() |
检测是否存在某个外部变量 |
6 | filter_input() |
过滤单个外部变量 |
7 | filter_input_array() |
过滤多个外部变量 |
验证过滤器常量:
序号 | 过滤器函数 | 描述 |
---|---|---|
1 | FILTER_VALIDATE_INT |
验证整数 |
2 | FILTER_VALIDATE_FLOAT |
浮点点验证 |
3 | FILTER_VALIDATE_BOOLEAN |
验证布尔项 |
4 | FILTER_VALIDATE_EMAIL |
验证邮箱 |
5 | FILTER_VALIDATE_URL |
验证 URL 地址 |
6 | FILTER_VALIDATE_IP |
验证 IP 地址 |
7 | FILTER_VALIDATE_REGEXP |
正则验证 |
FILTER_VALIDATE_BOOLEAN
: 布尔选项的返回值类型
序号 | 返回值 | 描述 |
---|---|---|
1 | true |
“1”, “true”, “on” 和 “yes” |
2 | false |
“0”, “false”, “off”, “no”, “” |
3 | null |
除以上情形外 |
清理过滤器常量:
序号 | 过滤器函数 | 描述 |
---|---|---|
1 | FILTER_UNSAFE_RAW |
保持原始数据 |
2 | FILTER CALLBACK |
自定义函数过滤数据 |
3 | FILTER_SANITIZE_STRING |
去除标签以及特殊字符:strip_tags() |
4 | FILTER_SANITIZE_STRIPPED |
“string” 过滤器别名 |
5 | FILTER_SANITIZE_ENCODED |
URL-encode 字符串,去除或编码特殊字符 |
6 | FILTER_SANITIZE_SPECIAL_CHARS |
HTML 转义字符, 等价于 htmlspecialchars() |
7 | FILTER_SANITIZE_EMAIL |
仅保留邮箱地址的合法字符 |
8 | FILTER_SANITIZE_URL |
仅保留合法的 URL, 必须从协议开始http/https |
9 | FILTER_SANITIZE_NUMBER_INT |
仅保留合法的数字和正负号+- |
10 | FILTER_SANITIZE_NUMBER_FLOAT |
仅保留合法的数字和正负号+- 以及指数 .,eE |
11 | FILTER_SANITIZE_MAGIC_QUOTES |
等价于函数: addslashes() |
示例:
//显示当前PHP版本的预定义过滤器
foreach (filter_list() as $filter_items){
echo filter_id($filter_items). '->'.$filter_items.'<br>';
}
// 1.单个变量过滤filter_var(variable, filter, options)
$num=5;
$str='AAA';
var_dump(filter_var($str,FILTER_VALIDATE_INT));//输出bool(false)
$options = ['options'=>['min_range'=> 18]];//规定一个包含标志/选项的关联数组或者一个单一的标志/选项。检查每个过滤器可能的标志和选项。
var_dump(filter_var($num, FILTER_VALIDATE_INT, $options));//输出bool(false)
//2.多个变量过滤:filter_var_array()
$person = ['name' => '小刚', 'age' => 10, 'sex' => '男'];
var_dump(filter_var_array($person, FILTER_VALIDATE_INT));//输出array(3) { ["name"]=> bool(false) ["age"]=> int(10) ["sex"]=> bool(false) }
//外部变量过滤:filter_input(输入类型, 变量名, 过滤器, 可选参数)
//获取浏览器地址中ID值
echo 'id = ' .$_GET['id'];
//设置过滤条件ID最小值为1
$options = ['options'=>['min_range'=> 1]];
var_dump(filter_input(INPUT_GET,'id',FILTER_VALIDATE_INT,$options));
//同时验证多个外部变量
//url=http://php.edu/0703/1.php?name=jack&email=abc@qq.com&age=33
$data = [
'name'=> FILTER_SANITIZE_STRING,
'email'=>FILTER_VALIDATE_EMAIL,
'age'=> ['filter'=>FILTER_VALIDATE_INT, 'options'=>['min_range'=> 25, 'max_range'=> 55]],
];
var_dump(filter_input_array(INPUT_GET, $data ));//输出array(3) { ["name"]=> string(4) "jack" ["email"]=> string(10) "abc@qq.com" ["age"]=> int(33) }