Blogger Information
Blog 5
fans 0
comment 0
visits 6189
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
变量作用域 常量 变量过滤器
笼子猪
Original
716 people have browsed it

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

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));
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