博客列表 >变量作用域、常量、以及变量过滤器实例演示

变量作用域、常量、以及变量过滤器实例演示

Dong.
Dong.原创
2020年07月07日 14:55:39740浏览

变量作用域

作用域作用:

1.变量的生效范围
2.作用域是直接查找变量的工具

代码示例:

  1. <?php
  2. // 显示错误
  3. error_reporting(E_ALL);
  4. // 作用域
  5. // 1.全局作用域
  6. $sitenName = 'PHP中文网';
  7. // 2.函数作用域
  8. function getInfo(){
  9. $name = 'peter';
  10. return $name;
  11. }
  12. // 输出
  13. echo $sitenName.'<br>';//正常输出
  14. echo $name,'<hr>';//报错,因为因为变量的作用域是函数作用域,只能在函数内部访问,不能够直接访问函数外部变量
  15. //通过调用函数方式来进行访问
  16. echo getInfo();
  17. echo '<hr>';
  18. // 在函数作用域中访问全部变量,有2种方式
  19. // 1.使用global关键字,表示调用全局变量
  20. function keyword(){
  21. global $sitenName;//表示调用此变量为全局变量;
  22. return $sitenName;
  23. }
  24. //输出
  25. echo keyword();
  26. echo '<hr>';
  27. // 2.使用超全局变量进行访问
  28. // 超全局变量在每个脚本中都有定义
  29. function all(){
  30. return $GLOBALS['sitenName'];//在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可)
  31. }
  32. echo all();
  33. echo '<hr>';
  34. // 在全局中创建的变量,会自动成为超全局数组$GLOBALS中的一个元素
  35. // 查看每个脚本中预定义的超全局变量
  36. echo '<pre>'.print_r($GLOBALS,true).'</pre>';

浏览器演示:

注:超全局变量不受作用域限制,可在函数中直接显示

PHP超全局变量列表:

序号 代码 注释
1 $GLOBALS $GLOBALS 这种全局变量用于在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可)。
2 $_SERVER 这种超全局变量保存关于报头、路径和脚本位置的信息。
3 $_REQUEST 用于收集 HTML 表单提交的数据。
4 $_POST 广泛用于收集提交 method=”post” 的 HTML 表单后的表单数据。$_POST 也常用于传递变量。
5 $_GET 可用于收集提交 HTML 表单 (method=”get”) 之后的表单数据。也可以收集 URL 中的发送的数据。
6 $_FILES 超全局变量
7 $_ENV 超全局变量
8 $_COOKIE 超全局变量
9 $_SESSION 超全局变量

常量

常量的定义:

  • 常量是单个值的标识符(名称)。在脚本中无法改变该值。
  • 有效的常量名以字符或下划线开头(常量名称前面没有 $ 符号)。
  • 常量必须初始化
  • 一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。
  • 常量在整个脚本中都可以使用,不受作用域限制,属全局变量
  • 定义常量有2种方式:
    使用const关键字
    使用define()函数
  • 常量除了用户自定义以外,还有预定义常量和魔术常量
1.用户自定义常量

代码示例:

  1. <?php
  2. // 自定义常量
  3. // 1.查看当前有那些常量
  4. //print_r(get_defined_constants(true));//true为参数分类
  5. // 2.查询用户自定义常量
  6. // print_r(get_defined_constants(true)['user']);
  7. // 3. 2种方式创建常量
  8. // 使用关键字const定义常量
  9. const WEATHER = 'sony';
  10. // 使用define()函数定义常量
  11. define('SMOKE','相机');
  12. echo '<pre>'.print_r((get_defined_constants(true)['user']),true).'</pre>';
  13. echo '<hr>';
  14. //类中的常量只能用const定义
  15. class Body
  16. {
  17. // define('header','head');会报错
  18. const FOOTER = 'foot';
  19. }
  20. echo Body::FOOTER,'<hr>';
  21. // 有时会用到constant('常量名')的方式来输出常量
  22. echo constant('SMOKE'),'<hr>';
  23. // 定义一个特殊常量
  24. // 这个案例可以看出使用常量名的方式不一定能获取到常量值
  25. define('','pink');
  26. echo '','<hr>';//输出为空
  27. echo constant('');

浏览器演示:

当前有那些变量:(只是一部分,可print_r(get_defined_constants(true));//true为参数分类,自行查询)

2.预定义常量
序号 代码 注释
1 PHP_VERSION 版本号
2 PHP_OS_FAMILY 操作系统
3 PHP_INT_MAX 最大整数
4 PHP_FLOAT_MAX 最大浮点数
5 DIRECTORY_SEPARATOR 目录分隔符
3.魔法常量
序号 代码 注释
1 __LINE__ 文件中的当前行号
2 __FILE__ 文件的完整路径和文件名
3 __DIR__ 文件所在目录
4 __FUNCTION__ 当前的函数名称
5 __CLASS__ 当前类名称
6 __TRAIT__ 当前Trait名称
7 __METHOD__ 当前类方法名称
8 __NAMESPACE__ 当前命名空间名称

图片示例:

4.命名空间

使用命名空间的原因:我们知道常量是全局作用域的,其实,还有函数,类,接口也是全局的,这些全局成员有一个共同点就是不能重复定义,但是在实际开发中,可能不得不需要用到同一个名字,这样就会有命名冲突的问题,而命名空间namespace,就是来解决这一问题的。

代码示例:

  1. <?php
  2. //常量的命名空间
  3. // namespace命名空间代码段需要放在所有代码的第一行
  4. // 下面展示案例二的时候先把案例一注释
  5. // 示例一
  6. // const NAME = 'jeak';
  7. // const NAME = 'theshk'; // 这一行会报错,因为命名冲突
  8. // echo NAME;
  9. // echo '<hr>';
  10. // 示例二:使用命名空间
  11. namespace ns1{
  12. const USER = '张三';
  13. }
  14. namespace ns2{
  15. const USER = '李四';
  16. }
  17. // 访问时在全局空间里面访问
  18. namespace {
  19. echo \ns1\USER,'<br>';
  20. echo \ns2\USER;
  21. }

图片演示:


变量过滤器

介绍:
过滤器可以处理变量(就是模板index.html中的{{param}}),把原始的变量经过处理后再展示出来,作用的对象是变量

查看当前PHP版本支持的预定义过滤器有那些:

  1. foreach(filter_list() as $filter){
  2. echo $filter.'=>'.filter_id($filter).'<br>';
  3. }

图片示例:

1.过滤单个变量

代码示例:

  1. <?php
  2. // 变量过滤器
  3. // 1. 过滤单个变量 filter_var()
  4. // $age = 30;
  5. $age = '130';
  6. $age = '50';
  7. // $age = 'abc';
  8. // filter_var(要过滤的变量, 过滤器常量)
  9. $options = ['options'=>['min_range'=> 18, 'max_range'=> 60]];//设置范围限定
  10. var_dump(filter_var($age, FILTER_VALIDATE_INT, $options));
  11. echo '<hr>';
  12. $email = 'admin@php.cn';
  13. var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
  14. echo '<hr>';
  15. var_dump(filter_var($email, 274));、//采用过滤器id效果相同

图片示例:

2.验证多个变量

代码示例:

  1. <?php
  2. // 变量过滤器
  3. // 2. 验证多个变量 filter_var_array()
  4. $a = 10;
  5. $b = '90';
  6. $arr = [$a, $b];
  7. var_dump(filter_var_array($arr, FILTER_VALIDATE_INT));
  8. echo '<hr>';

图片示例:

3.外部变量

代码示例:

  1. <?php
  2. // 变量过滤器
  3. //3. 外部变量
  4. //通常通过 http请求发送过来的,表单,get,post
  5. //使用GET参数来演示外部变量的获取与验证/过滤
  6. //filter_input(输入类型get/post, 变量名, 过滤器, 参数)
  7. echo 'id = ' .$_GET['id'];
  8. $options = ['options'=>['min_range'=> 1]];
  9. var_dump(filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT, $options));
  10. echo '<hr>';
  11. // 同时验证多个外部变量
  12. $args = [
  13. 'username'=> FILTER_SANITIZE_STRING,
  14. 'email'=>FILTER_VALIDATE_EMAIL,
  15. 'age'=> ['filter'=>FILTER_VALIDATE_INT, 'options'=>['min_range'=> 18, 'max_range'=> 60]],
  16. 'blog'=> FILTER_VALIDATE_URL
  17. ];
  18. var_dump(filter_input_array(INPUT_GET, $args));

图片示例:

扩展知识:

1.PHP 过滤器用于对来自非安全来源的外部数据(比如用户输入)进行验证和过滤。
外部数据来源:

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

2.常用的过滤器函数

序号 函数 描述
1 filter_list() 返回一个当前版本支持的所有过滤器的数组
2 filter_id() 返回当前过滤器的id号
3 filter_var() 过滤单个变量
4 filter_var_array() 过滤多个变量
5 filter_has_var() 检测是否存在某个外部变量
6 filter_input() 过滤单个外部变量
7 filter_input_array() 过滤多个外部变量
  • 外部变量类型: INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV
  • 过滤器主要分为二类: 验证过滤器, 清理过滤器

3.验证过滤器常量

  • 验证过滤器: 又叫”验证器”, 主要用于数据的类型和格式验证
序号 过滤器函数 描述
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 除以上情形外

4.清理过滤器常量

  • 清理过滤器: 去掉非法字符,仅保留指定内容
序号 过滤器函数 描述
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()

总结:

  • 了解了变量作用域,可以设置变量的生效范围,是查找变量的手段;
  • 学习了一些带有属性的常量以及自定义常量的2种创建方法;
  • 知道了常量的命名空间,以及如何访问;
  • 对于变量过滤器还是有点懵懂,后续多看看视频加深理解吧;
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议