博客列表 >变量作用域 常量 变量过滤器

变量作用域 常量 变量过滤器

笼子猪
笼子猪原创
2020年07月06日 16:47:40717浏览

变量作用域 常量 变量过滤器

1.变量作用域

  1. 作用域: 代表在这个区域 生效的范围。
  2. 变量作用域: 代表变量在某个生效的范围 变量只有在生效的区域内 才能被正常使用 超出范围将无法使用。
  3. (作用域是变量的生效范围,是查找变量的工具)。
  4. 只要是变量一定有一个作用域。

函数作用域(局部作用域): 定义到函数内部的变量,其作用域是局部的

(全局作用域): 定义到函数外部的变量,其作用域是全局的

  1. // 全局变量 作用域为全局
  2. // 通过 关键字 global 或者 $GLOBALS
  3. $siteName = '盘古开天辟地';
  4. // 函数作用域 (局部作用域)
  5. // 函数后面的 :string 代表返回类型 作用和 TS类似 强制规定返回的参数的类型 避免因为参数类型不匹配出现的问题 (弱类型和强类型的区别)
  6. // php7版本后 支持函数返回类型可声明的支持
  7. function getInfo():string
  8. {
  9. // php 在函数内部是不能直接访问全局变量的 php函数会创建一个独立的内部空间(函数作用域)。 如果php函数内部需要访问全局变量,只能通过 global 或者 $GLOBALS 才能访问全局变量
  10. // 我们创建的全局变量会自动成为 超全局变量$GLOBALS数组中的元素
  11. // 超全局变量不受作用域限制 可以在函数内直接方位
  12. // php可以访问外部函数 php函数只受命名空间的限制
  13. // php函数内部 可以直接访问内部变量
  14. // 和javascript不同 javascript在函数内部 可以直接访问到全局属性
  15. // return $siteName; 报错 未定义该变量
  16. // 通过 global
  17. // global 现在用的不多
  18. // 用法
  19. // global $siteName;
  20. // return $siteName;
  21. // 通过 $GLOBALS 直接访问
  22. return $GLOBALS['siteName'];
  23. }
  24. echo getInfo(); // 执行 php函数

2.常量

  1. 常量一旦定义 则不可变更 (只读)
  2. 常量前没有 $
  3. 常量必须初始化 const SEX = 0;
  4. 常量不受作用域的限制
  5. 常量本身可以使用小写来定义 但为了和变量有所区分 建议使用字母大写 多个单词使用下划线来定义常量
  6. 类中定义常量 不能使用 define函数 只能使用 const来定义

常见常量的方法

  1. // 1. 关键字 const
  2. const APP_NAME = '超级网络';
  3. // 2. define() 函数
  4. define('APP_ID',123);
  5. // 区别 在类中定义常量 无法使用 define函数
  6. class User{
  7. // 类中定义常量只能使用 const 无法使用define()
  8. const IS_PEOPLE = true;
  9. // define('NATION','china');
  10. }
  11. // 常量无法修改
  12. // APP_NAME = '123'; 错误
  13. // 常量必须初始化
  14. // const SEX; 错误
  15. // 常量一旦被定义 就无法被删除
  16. // unset(APP_NAME); 错误
  17. // 查看系统常量 使用函数 get_define_constants();
  18. // print_r(get_define_constants());
  19. // 常量分类 传入参数 true
  20. // get_define_constants(true);
  21. // 其中 系统常量数组中 user分类为用户自定义常量
  22. // 用户自定义常量获取
  23. // get_define_constants(true)['user'];
  24. // 输出常量
  25. // 1. 直接输出 echo 变量名;
  26. // 2. 通过 constant('变量名');
  27. // 两种输出变量的方式有何区别?
  28. // 例如:
  29. // 如果用一个变量保存一个常量名 希望通过这个变量的值来获取对应的常量 这时候 直接用 echo 并不能正确的输出这个常量(只能打印这个变量的值) 此时需要使用constant()
  30. $appName = 'APP_NAME';
  31. echo $appName; // APP_NAME
  32. echo constant($appName); // 超级网络

预定义常量

  1. echo 'php版本号:'.PHP_VERSION.'<br>';
  2. echo '最大整数:'.PHP_INT_MAX.'<br>';
  3. echo '目录分隔符:'.DIRECTORY_SEPARATOR.'<br>';
  4. // ...

3.魔术常量

  1. 魔术变量的值随着它们的位置变化而变化
  2. 虽然是常量 但它们的值 总是随着代码的位置或者 不同的文件变化
  3. 只读 它的值随环境变化而变化
  1. echo '当前行号'.__LINE__.'<br>';
  2. echo '当前文件'.__FILE__.'<br>';
  3. echo '当前目录'.__DIR__.'<br>';
  4. // ...

4.命名空间

  1. 针对不受作用域限制的成员(全局成员,全局变量,常量,函数…)。
  2. 全局对象 容易出现 命名冲突的问题(都在全局作用域中)。

  3. 解决全局成员的命名冲突问题

  1. // 两个常量发生命名冲突
  2. // const APP_NAME = 'local';
  3. // const APP_NAME = 'localOne';
  4. // 定义两个不同的命名空间 分别定义 APP_NAME;
  5. //
  6. namespace ns1{
  7. const APP_NAME = 'local';
  8. // 报错 此时ns2还没有定义;
  9. // echo \ns2\APP_NAME;
  10. }
  11. namespace ns2{
  12. const APP_NAME = 'localOne';
  13. echo \ns1\APP_NAME; // local
  14. }
  15. // 在全局命名空间中同时打印 ns1 和 ns2 中的 APP_NAME;
  16. namespace {
  17. echo \ns1\APP_NAME; // local
  18. echo \ns2\APP_NAME; // localOne
  19. }

5.变量过滤器

  1. 查看内置过滤器 filter_list();

  2. 过滤单个变量 filter_var();

  1. // 验证单个年龄
  2. $age = 18;
  3. // 过滤单个变量 filter_var();
  4. // filter_var(需要过滤的变量,过滤器常量);
  5. // 返回的是布尔值
  6. var_dump($age,FILTER_VALIDATE_INT);
  7. // 如果是整数 返回 当前这个值 如果不是整数 返回 false
  8. // 如果需要加上自己的参数限制 需要额外配置信息
  9. $options = ['options'=>['min_range'=>18,'max_range'=>60]];
  10. var_dump($age,FILTER_VALIDATE_INT,$options);
  11. // 验证单个邮箱
  12. $email = '28950713@qq.com';
  13. var_dump('$email',FILTER_VALIDATE_EMAIL);
  1. 验证多个变量 filter_var_array();
  1. $a = 10;
  2. $b = 'php';
  3. // 判断多个参数是否为整数
  4. var_dump([$a,$b],257);
  5. // array(2) { [0]=> int(10) [1]=> bool(false) }
  1. 验证外部变量(通过http 请求过来的参数)

filter_input() filter_input(请求方式,变量名,过滤器,变量)

  1. // 通过get演示外部参数的获取与验证(过滤);
  2. // filter_input()
  3. // filter_input(指明输入的类型(get/post),变量名,过滤器,变量);
  4. // echo 'id='.$_GET['id'];
  5. // 可以通过if...else.. 但比较繁琐
  6. $options = ['options'=>['min_range'=>1]];
  7. var_dump(filter_input(INPUT_GET,'id',FILTER_VALIDATE_INT,$options))
  1. 验证外部多个变量 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_SANITIZE_URL
  6. ];
  7. var_dump(filter_input_array(INPUT_GET,$args));
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议