登录  /  注册
博主信息
博文 100
粉丝 8
评论 2
访问量 146665
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
变量作用域、常量、命名空间、过滤器详解
lilove的博客
原创
898人浏览过

变量作用域

作用域的意义:

  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));

批改老师:GuanhuiGuanhui

批改状态:合格

老师批语:写很好!继续加油!
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学