Blogger Information
Blog 26
fans 2
comment 0
visits 24314
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
变量作用域、常量、命名空间、过滤器
leverWang
Original
632 people have browsed it

1.变量作用域

变量分为局部变量和全局变量,作用域就是变量的生效范围
1.变量作用域,示例:

  1. $demo = '变量';//全局作用域
  2. function demo()
  3. {
  4. $demo1 = '函数内变量';//函数作用域
  5. }
  6. echo $demo; //输出结果
  7. echo $demo1;//不会打印变量,因其作用域在函数demo内,只能在函数内部使用

2.全局变量,示例:

  1. $demo = '变量';
  2. $demo1 = '变量123';
  3. function demo()
  4. {
  5. // 声明一个全局变量,声明为全局变量才能对外部变量修改
  6. global $demo1;
  7. return $demo1;
  8. }
  9. echo $demo;//输出结果
  10. echo demo();//输出结果

3.超全局变量\$GLOBALS,(\$GLOBALS 是一个预定义的超全局数组,其中包含了全局作用域中的所有可用变量,变量的名字就是数组的键。)

  1. /*global和$GLOBALS 区别:global $var 指的是对函数外部同名变量的引用,是两个互不影响的变量,而 $GLOBALS['var'] 指的是函数外部变量本身。
  2. */
  3. $demo = '变量';
  4. $demo1 = '变量123';
  5. function demo()
  6. {
  7. return $GLOBALS['demo1'];
  8. }
  9. echo $GLOBALS['demo'];

2.常量

常量类似变量,贯穿整个脚本是自动全局的,但是常量一旦被定义就无法更改,有效的常量名以字符或下划线开头(常量名称前面没有 $ 符号),通常使用大写字母定义常量,不能使用数字开头;

  • 常量有2种定义方式:
    1.使用const关键字;
    2.使用define()函数;
  • 系统常量,可以使用print_r(get_defined_constants());查看所有系统常量
    1. // const 定义
    2. const DEMO= '常量';
    3. // 函数define定义
    4. define('DEMO1', 'define定义常量');
    5. //类中的常量只能用const定义
    6. class demo{
    7. const DEMO2='类中的常量';
    8. function demo2(){
    9. //在类里面访问定义的类常量用self关键字;self的代表的就是当前类
    10. echo self::DEMO2;
    11. }
    12. }
    13. //类外常量的访问
    14. echo demo::DEMO2;
    15. //constant,返回一个常量的值:
    16. echo constant('DEMO');
    17. // 查询用户自定义的常量
    18. 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__ 当前行号

命名空间(默认情况下,所有常量、类和函数名都放在全局空间下)

  1. //全局成员,不允许重复定义,因此使用命名空间来定义
  2. namespace demo {
  3. const TEST = '第一个命名空间';
  4. }
  5. namespace demo1 {
  6. const TEST = '第二个命名空间';
  7. }
  8. //全局空间: 匿名空间
  9. namespace {
  10. echo \demo\TEST, "<br>";
  11. echo \demo1\TEST, "<br>";
  12. }

变量过滤器

常用的过滤器函数:
序号 函数 描述
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()

示例:

  1. //显示当前PHP版本的预定义过滤器
  2. foreach (filter_list() as $filter_items){
  3. echo filter_id($filter_items). '->'.$filter_items.'<br>';
  4. }
  5. // 1.单个变量过滤filter_var(variable, filter, options)
  6. $num=5;
  7. $str='AAA';
  8. var_dump(filter_var($str,FILTER_VALIDATE_INT));//输出bool(false)
  9. $options = ['options'=>['min_range'=> 18]];//规定一个包含标志/选项的关联数组或者一个单一的标志/选项。检查每个过滤器可能的标志和选项。
  10. var_dump(filter_var($num, FILTER_VALIDATE_INT, $options));//输出bool(false)
  11. //2.多个变量过滤:filter_var_array()
  12. $person = ['name' => '小刚', 'age' => 10, 'sex' => '男'];
  13. var_dump(filter_var_array($person, FILTER_VALIDATE_INT));//输出array(3) { ["name"]=> bool(false) ["age"]=> int(10) ["sex"]=> bool(false) }
  14. //外部变量过滤:filter_input(输入类型, 变量名, 过滤器, 可选参数)
  15. //获取浏览器地址中ID值
  16. echo 'id = ' .$_GET['id'];
  17. //设置过滤条件ID最小值为1
  18. $options = ['options'=>['min_range'=> 1]];
  19. var_dump(filter_input(INPUT_GET,'id',FILTER_VALIDATE_INT,$options));
  20. //同时验证多个外部变量
  21. //url=http://php.edu/0703/1.php?name=jack&email=abc@qq.com&age=33
  22. $data = [
  23. 'name'=> FILTER_SANITIZE_STRING,
  24. 'email'=>FILTER_VALIDATE_EMAIL,
  25. 'age'=> ['filter'=>FILTER_VALIDATE_INT, 'options'=>['min_range'=> 25, 'max_range'=> 55]],
  26. ];
  27. var_dump(filter_input_array(INPUT_GET, $data ));//输出array(3) { ["name"]=> string(4) "jack" ["email"]=> string(10) "abc@qq.com" ["age"]=> int(33) }
Correcting teacher:GuanhuiGuanhui

Correction status:qualified

Teacher's comments:写的还行!尽量跟上老师讲课的进度!
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post