博客列表 >变量作用域、常量、命名空间、过滤器

变量作用域、常量、命名空间、过滤器

leverWang
leverWang原创
2020年07月07日 18:09:06629浏览

1.变量作用域

变量分为局部变量和全局变量,作用域就是变量的生效范围
1.变量作用域,示例:

  1. $demo = '变量';//全局作用域
  2. function demo()
  3. {
  4. $demo1 = '函数内变量';//函数作用域
  5. }
  6. echo $demo; //输出结果
  7. echo $demo1;//不会打印变量,因其作用域在函数demo内,只能在函数内部使用

2.全局变量,示例:

  1. $demo = '变量';
  2. $demo1 = '变量123';
  3. function demo()
  4. {
  5. // 声明一个全局变量,声明为全局变量才能对外部变量修改
  6. global $demo1;
  7. return $demo1;
  8. }
  9. echo $demo;//输出结果
  10. echo demo();//输出结果

3.超全局变量\$GLOBALS,(\$GLOBALS 是一个预定义的超全局数组,其中包含了全局作用域中的所有可用变量,变量的名字就是数组的键。)

  1. /*global和$GLOBALS 区别:global $var 指的是对函数外部同名变量的引用,是两个互不影响的变量,而 $GLOBALS['var'] 指的是函数外部变量本身。
  2. */
  3. $demo = '变量';
  4. $demo1 = '变量123';
  5. function demo()
  6. {
  7. return $GLOBALS['demo1'];
  8. }
  9. echo $GLOBALS['demo'];

2.常量

常量类似变量,贯穿整个脚本是自动全局的,但是常量一旦被定义就无法更改,有效的常量名以字符或下划线开头(常量名称前面没有 $ 符号),通常使用大写字母定义常量,不能使用数字开头;

  • 常量有2种定义方式:
    1.使用const关键字;
    2.使用define()函数;
  • 系统常量,可以使用print_r(get_defined_constants());查看所有系统常量
    1. // const 定义
    2. const DEMO= '常量';
    3. // 函数define定义
    4. define('DEMO1', 'define定义常量');
    5. //类中的常量只能用const定义
    6. class demo{
    7. const DEMO2='类中的常量';
    8. function demo2(){
    9. //在类里面访问定义的类常量用self关键字;self的代表的就是当前类
    10. echo self::DEMO2;
    11. }
    12. }
    13. //类外常量的访问
    14. echo demo::DEMO2;
    15. //constant,返回一个常量的值:
    16. echo constant('DEMO');
    17. // 查询用户自定义的常量
    18. print_r(get_defined_constants(true)['user']);

    2.1 预定义常量

    | 序号 | 魔术常量 | 描述 |
    | —— | —————————- | ————— |
    | 1 | PHP_VERSION | 版本号 |
    | 2 | PHP_OS_FAMILY | 操作系统 |
    | 3 | PHP_INT_MAX | 最大整数 |
    | 4 | PHP_FLOAT_MAX | 最大浮点数 |
    | 5 | DIRECTORY_SEPARATOR | 目录分隔符 |

2.2 魔术常量

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

命名空间(默认情况下,所有常量、类和函数名都放在全局空间下)

  1. //全局成员,不允许重复定义,因此使用命名空间来定义
  2. namespace demo {
  3. const TEST = '第一个命名空间';
  4. }
  5. namespace demo1 {
  6. const TEST = '第二个命名空间';
  7. }
  8. //全局空间: 匿名空间
  9. namespace {
  10. echo \demo\TEST, "<br>";
  11. echo \demo1\TEST, "<br>";
  12. }

变量过滤器

常用的过滤器函数:
序号 函数 描述
1 filter_list() 当前php版本支持的预定义过滤器
2 filter_id() 返回指定过滤器的 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()

示例:

  1. //显示当前PHP版本的预定义过滤器
  2. foreach (filter_list() as $filter_items){
  3. echo filter_id($filter_items). '->'.$filter_items.'<br>';
  4. }
  5. // 1.单个变量过滤filter_var(variable, filter, options)
  6. $num=5;
  7. $str='AAA';
  8. var_dump(filter_var($str,FILTER_VALIDATE_INT));//输出bool(false)
  9. $options = ['options'=>['min_range'=> 18]];//规定一个包含标志/选项的关联数组或者一个单一的标志/选项。检查每个过滤器可能的标志和选项。
  10. var_dump(filter_var($num, FILTER_VALIDATE_INT, $options));//输出bool(false)
  11. //2.多个变量过滤:filter_var_array()
  12. $person = ['name' => '小刚', 'age' => 10, 'sex' => '男'];
  13. var_dump(filter_var_array($person, FILTER_VALIDATE_INT));//输出array(3) { ["name"]=> bool(false) ["age"]=> int(10) ["sex"]=> bool(false) }
  14. //外部变量过滤:filter_input(输入类型, 变量名, 过滤器, 可选参数)
  15. //获取浏览器地址中ID值
  16. echo 'id = ' .$_GET['id'];
  17. //设置过滤条件ID最小值为1
  18. $options = ['options'=>['min_range'=> 1]];
  19. var_dump(filter_input(INPUT_GET,'id',FILTER_VALIDATE_INT,$options));
  20. //同时验证多个外部变量
  21. //url=http://php.edu/0703/1.php?name=jack&email=abc@qq.com&age=33
  22. $data = [
  23. 'name'=> FILTER_SANITIZE_STRING,
  24. 'email'=>FILTER_VALIDATE_EMAIL,
  25. 'age'=> ['filter'=>FILTER_VALIDATE_INT, 'options'=>['min_range'=> 25, 'max_range'=> 55]],
  26. ];
  27. var_dump(filter_input_array(INPUT_GET, $data ));//输出array(3) { ["name"]=> string(4) "jack" ["email"]=> string(10) "abc@qq.com" ["age"]=> int(33) }
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议