Blogger Information
Blog 100
fans 8
comment 2
visits 150205
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
变量作用域、常量、命名空间、过滤器详解
lilove的博客
Original
938 people have browsed it

变量作用域

作用域的意义:

  1. 变量的生效范围;
  2. 查找变量的工具。

示例:

  1. <?php
  2. // 全局作用域
  3. $name = '小刚';
  4. // 全局变量自动成为超全局数组$GLOBALS中的元素
  5. echo '<pre>' . print_r($GLOBALS, true) . '</pre>';
  6. echo $GLOBALS['name'];
  7. echo '<hr>';
  8. // 函数作用域
  9. function student()
  10. {
  11. // 私有变量
  12. // $myname = '超人';
  13. // return $myname;
  14. // 在函数中不能直接访问全局变量,要用global声明或者用超全局变量$GLOBALS来访问
  15. // 1.global声明
  16. // global $name;
  17. // return $name;
  18. // 2.超全局变量$GLOBALS访问
  19. return $GLOBALS['name'];
  20. }
  21. echo student();

常量

常量前没有$,推荐全大写多个单词用“_”连接,必须要初始化,不让删除,不受作用域限制。

示例:

  1. <?php
  2. // 查看当前系统常量
  3. // print_r(get_defined_constants(true));
  4. // 自定义常量,两种方式:const、define()。
  5. const MY_NAME = '小刚';
  6. define('MY_AGE', 18);
  7. // 只查看自定义常量,相当于只看系统常量数组中的一个元素
  8. print_r(get_defined_constants(true)['user']);
  9. // 类中的常量只允许用const定义,用define()会报错
  10. class People
  11. {
  12. const NAME = '小刚';
  13. }
  14. echo '<br>';
  15. // 如果常量名放在一个变量中,用constent()输出常量的值
  16. $name = 'MY_NAME';
  17. echo constant($name);
  18. echo '<br>';
  19. // null也可以用作常量名,但要用constant()获取值
  20. define('', '男');
  21. echo constant('');

预定义常量与魔术常量

魔术常量的值随系统变化而变化,无法自定义。

示例:

  1. <?php
  2. // 预定义常量:
  3. echo '版本号: ' . PHP_VERSION . '<br>';
  4. echo '操作系统: ' . PHP_OS_FAMILY . '<br>';
  5. echo '最大整数: ' . PHP_INT_MAX . '<br>';
  6. echo '最大浮点数: ' . PHP_FLOAT_MAX . '<br>';
  7. echo '目录分隔符: ' . DIRECTORY_SEPARATOR . '<hr>';
  8. // 魔术常量:值随系统变化而变化,无法自定义
  9. echo '当前文件完整路径: ' . __FILE__ . '<br>';
  10. echo '当前文件所在目录: ' . __DIR__ . '<br>';
  11. echo '当前行号: ' . __LINE__ . '<br>';
  12. echo '当函数名: ' . __FUNCTION__ . '<br>';
  13. echo '当前类名: ' . __CLASS__ . '<br>';
  14. echo '当前trait名: ' . __TRAIT__ . '<br>';
  15. echo '当前类方法名: ' . __METHOD__ . '<br>';
  16. echo '当前命名空间: ' . __NAMESPACE__ . '<br>'

命名空间

类、函数、接口、常量都是全局成员,不允许重复定义。

解决全局成员的命名冲突问题。

示例:

  1. <?php
  2. // 命名空间
  3. namespace name1 {
  4. const MY_NAME = '超人';
  5. }
  6. namespace name2 {
  7. const MY_NAME = '小刚';
  8. }
  9. // 全局空间,默认空间没有名称
  10. namespace {
  11. echo name1\MY_NAME;
  12. echo '<br>';
  13. echo name2\MY_NAME;
  14. }

过滤器

PHP过滤器作用:

  • 验证和过滤来自于非安全来源的外部数据。

外部数据来源有以下途径:

序号 数据来源 描述
1 表单 来自表音的用户输入数据
2 Cookies 来自浏览器中的 cookie
3 服务器变量 防止伪装的合法访问
4 Web 服务数据 Web 请求的数据
5 数据库查询结果 数据表中的数据并不可信

常用的过滤器函数:

序号 函数 描述
1 filter_list()
2 filter_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()

选项与标志

  • 可以对过滤器设置选项和标志, 对数据进行更加精准的过滤处理
  • 选项与标志使用数组键名表示: 'options'=>[...], 'flags'=>...(复数)

过滤器部分示例:

  1. <?php
  2. // 查看当前php版本支持的过滤器
  3. // foreach (filter_list() as $filter) {
  4. // echo $filter . ' => ' . filter_id($filter) . '<br>';
  5. // }
  6. // echo '<hr>';
  7. // 1.单个变量过滤:filter_var(变量名, 过滤器常量)
  8. // $age = 18;
  9. // var_dump(filter_var($age, FILTER_VALIDATE_INT));
  10. // echo '<hr>';
  11. // 2.多个变量过滤:filter_var_array()
  12. // $name = '小刚';
  13. // $age = 10;
  14. // $sex = '男';
  15. // 将变量放到一个数组中
  16. // $people = ['name' => '小刚', 'age' => 10, 'sex' => '男'];
  17. // var_dump(filter_var_array($people, FILTER_VALIDATE_INT));
  18. // echo '<br>';
  19. // var_dump(filter_var_array($people, 513));
  20. // echo '<hr>';
  21. // 3.外部变量过滤:filter_input(输入类型, 变量名, 过滤器, 可选参数)
  22. // echo '标题:' . $_GET['title'];
  23. // 范围用'options' => ['min_range' => 22, 'max_range' => 55]表示
  24. // $data = ['options' => ['min_range' => 2000, 'max_range' => 10000]];
  25. // var_dump(filter_input(INPUT_GET, 'cost', FILTER_VALIDATE_INT, $data));
  26. // echo '<hr>';
  27. // 4.验证多个外部变量:filter_input_array()
  28. $data = [
  29. 'name' => FILTER_SANITIZE_STRING,
  30. 'cost' => FILTER_VALIDATE_INT,
  31. 'exp' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 2, 'max_range' => 10]],
  32. 'web' => FILTER_VALIDATE_URL
  33. ];
  34. var_dump(filter_input_array(INPUT_GET, $data));

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