博客列表 >php的变量作用域、常量及变量过滤器

php的变量作用域、常量及变量过滤器

北纬38
北纬38原创
2020年07月05日 23:10:40792浏览

1.变量作用域

作用域是变量的生效范围
作用域是查找变量的工具
全局作用域:写到函数外部的变量。
超全局变量在每个脚本中都有预定义。
在全局中创建的变量,会自动成为超全局数组$GLOBALS中的一个元素。
超全局变量不受作用域限制,可在函数中直接访问。
函数作用域:
在PHP,函数会创建出一个独立的作用域,不能直接访问外部的变量。
在函数外部是全局变量。
函数内部是私有变量可直接访问。

  1. <?php
  2. $siteName = '淘宝网';
  3. // 超全局变量
  4. // echo '<pre>'.print_r($GLOBALS,true).'</pre>';
  5. // echo $GLOBALS['siteName'];
  6. function getInfo()
  7. {
  8. // return $siteName;
  9. // 在函数做一个声明
  10. // global $siteName;
  11. // return $siteName;
  12. // 私有变量
  13. // $local = 'taobao.com';
  14. // return $local;
  15. return $GLOBALS['siteName'];
  16. }
  17. echo getInfo();
  18. echo '<hr>';
  19. echo $_SERVER['SCRIPT_NAME'];
  20. echo '<hr>';
  21. echo $_SERVER['SCRIPT_FILENAME'];


2.php常量

二种方式创建:关键字const、函数define
类常量只允许用const。
常量前没有$
常量必须初始化
常量不允许删除
常量不受作用域限制
常量推荐全部大写,多个单词之间用下划线连接。

  1. // print_r(get_defined_constants(true));
  2. const APP_PATH ='/phpstudy_pro';
  3. define('APP_NAME','淘宝宝');
  4. // 查询用户自定义常量
  5. print_r(get_defined_constants(true)['user']);
  6. class user
  7. {
  8. const NATION = 'china';
  9. // define('D',200);
  10. }
  11. // 常量初始化
  12. $age;
  13. const SEX = 'BOY';
  14. // 常量不允许删除
  15. // unset(SEX);
  16. // print_r(get_defined_constants(true)['user']);
  17. echo APP_NAME;
  18. echo '<hr>';
  19. echo constant('APP_PATH');
  20. echo '<hr>';
  21. $name = 'APP_NAME';
  22. echo constant($name);


预定义常量:

  1. echo '版本号: ' . PHP_VERSION . '<br>';
  2. echo '操作系统: ' . PHP_OS_FAMILY . '<br>';
  3. echo '最大整数: ' . PHP_INT_MAX . '<br>';
  4. echo '最大浮点数: ' . PHP_FLOAT_MAX . '<br>';
  5. echo '目录分隔符: ' . DIRECTORY_SEPARATOR . '<hr>';

魔术常量:

序号 魔术常量 描述
1 __LINE__ 文件中的当前行号
2 __FILE__ 文件的完整路径和文件名
3 __DIR__ 文件所在目录
4 __FUNCTION__ 当前的函数名称
5 __CLASS__ 当前类名称
6 __TRAIT__ 当前Trait名称
7 __METHOD__ 当前类方法名称
8 __NAMESPACE__ 当前命名空间名称
  1. echo __FILE__.'<br>';
  2. echo __DIR__.'<br>';
  3. echo __LINE__.'<br>';


命名空间:
全局空间中的成员, 不允许重复定义。
与函数也是全局成员, 也不允许重复定义。
全局成员: 常量, 类, 函数, 接口
命名空间: 解决了全局成员 的命名冲突问题。

  1. namespace class1{
  2. const APP_NAME ='京东';
  3. }
  4. namespace class2{
  5. const APP_NAME ='淘宝';
  6. // echo \class1\APP_NAME;
  7. }
  8. namespace{
  9. echo \class1\APP_NAME,'<br>';
  10. echo \class2\APP_NAME,'<br>';
  11. }

3.变量过滤器

PHP 过滤器用于验证和过滤来自非安全来源的外部数据。
foreach()查看当前php版本支持的预定义过滤器

常用的过滤器函数:

序号 函数 描述
1 filter_list() 函数返回包含所有得到支持的过滤器
2 filter_id()
3 filter_var() 过滤单个变量
4 filter_var_array() 过滤多个变量
5 filter_has_var() 检测是否存在某个外部变量
6 filter_input() 过滤单个外部变量
7 filter_input_array() 过滤多个外部变量

filter_list()实例:

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


filter_var()实例:

  1. $age =36;
  2. var_dump(filter_var($age,FILTER_VALIDATE_INT))


filter_var_array()实例:

  1. $a = 200;
  2. $B ='230';
  3. var_dump(filter_var_array([$a,$B],FILTER_VALIDATE_INT));


filter_input(输入类型get/post, 变量名, 过滤器, 参数)实例:

  1. echo 'id ='.$_GET['id'],'<br>';
  2. $options = ['options'=>['min_range'=> 1]];
  3. var_dump(filter_input(INPUT_GET,'id',FILTER_VALIDATE_INT,$options));


filter_input_array()实例:

  1. $args = [
  2. 'username'=> FILTER_SANITIZE_STRING,
  3. 'email'=>FILTER_VALIDATE_EMAIL,
  4. 'age'=> ['filter'=>FILTER_VALIDATE_INT, 'options'=>['min_range'=> 18, 'max_range'=> 60]],
  5. 'blog'=> FILTER_VALIDATE_URL
  6. ];
  7. var_dump(filter_input_array(INPUT_GET, $args));

外部变量类型: INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV
过滤器主要分为二类: 验证过滤器, 清理过滤器
使用GET参数来演示外部变量的获取与验证/过滤
验证过滤器常量:

序号 过滤器函数 描述
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 正则验证

外部数据来源:

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

布尔选项的返回值类型:

序号 返回值 描述
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'=>...(复数)

4.总结

  • 掌握全局作用域和函数作用域。在函数外部是全局变量。函数内部是私有变量
  • 常量二种方式创建:关键字const、函数define,推荐全部大写,多个单词之间用下划线连接,理解魔术常量。
  • 命名空间: 解决了全局成员 的命名冲突问题。
  • 掌握变量过滤器,利用常用函数过滤器过滤单个或者多个变量,然后清理过滤器和验证过滤器。
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议