Blogger Information
Blog 40
fans 0
comment 1
visits 39784
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
变量作用域、常量、以及变量过滤器实例演示
Dong.
Original
739 people have browsed it

变量作用域

作用域作用:

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种创建方法;
  • 知道了常量的命名空间,以及如何访问;
  • 对于变量过滤器还是有点懵懂,后续多看看视频加深理解吧;
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