Blogger Information
Blog 13
fans 2
comment 0
visits 10348
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
php的变量作用域、常量及变量过滤器
北纬38
Original
793 people have browsed it

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,推荐全部大写,多个单词之间用下划线连接,理解魔术常量。
  • 命名空间: 解决了全局成员 的命名冲突问题。
  • 掌握变量过滤器,利用常用函数过滤器过滤单个或者多个变量,然后清理过滤器和验证过滤器。
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