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

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

ROC-Y
ROC-Y原创
2020年04月20日 03:14:35660浏览

变量

作用域

  • 变量作用域,即变量的生效范围。
  • 函数作用域:函数里面创建的作用域
  • 全局作用域:函数之外的变量生效范围
  • 变量类型:
    • 私有变量,函数中定义,作用域在函数
    • 全局变量,函数外定义的变量,不能被函数直接使用
    • 超全局变量,也叫预定义变量,访问不受作用域限制
  • 超全局变量,也叫超全局数组,随系统加载,因此在所有脚本中均有定义,全局和函数中都可以访问
序号 变量名 描述
1 $GLOBALS 引用全局作用域中可用的全部变量
2 $_SERVER 服务器和执行环境信息
3 $_GET HTTP GET 请求:通过 URL 参数传递给当前脚本的变量的数组
4 $_POST HTTP POST 请求: 将变量以关联数组形式传入当前脚本
5 $_FILES HTTP 文件上传变量,保存着上传文件的全部信息
6 $_COOKIE 通过 HTTP Cookies 方式传递给当前脚本的变量的数组
7 $_SESSION 当前脚本可用 SESSION 变量的数组
8 $_REQUEST 默认情况下包含了 $_GET$_POST$_COOKIE 的数组
9 $_ENV 通过环境方式传递给当前脚本的变量的数组

  1. <?php
  2. //声明全局变量$a
  3. //全局变量会自动注册为超全局变量数组$GLOBALS的一个值
  4. $var = "hello";
  5. (print_r($GLOBALS));
  6. echo '<br>';
  7. function demo(): string {
  8. //私有变量拿不到全局变量$var的值,会报错
  9. // $letter = $var;
  10. //通过global获取全局变量
  11. global $var;
  12. $letter = $var;
  13. return $letter;
  14. }
  15. function demo2(){
  16. //通过超全局变量获取全局变量值
  17. $private = $GLOBALS['var'];
  18. return $private;
  19. }
  20. echo demo(),'<br>';
  21. echo demo2();

静态变量

  • 函数中的私有变量,每次调用函数都会重新初始化
  • 用static声明的变量,叫静态变量,只会在第一次调用时候初始化一次,下一次调用拿到的变量值会保留上一次调用结束时候的结果,实现数据共享。
  1. <?php
  2. namespace ns1;
  3. //定义函数,返回$i自增的值
  4. function test1() : int {
  5. $i = 0 ;
  6. return $i++;
  7. }
  8. //每次调用函数,返回的值都是1
  9. echo test1(),"<br>";
  10. echo test1(),"<br>";
  11. echo test1(),"<br>","<hr>";
  12. namespace ns2;
  13. //将$j定义为全局变量,实现数据共享,但不推荐进行数据改变
  14. $j = 0 ;
  15. //定义函数,返回$j自增的值
  16. function test2() : int {
  17. global $j;
  18. return $j++;
  19. }
  20. //每次调用函数,返回的值都会+1
  21. echo test2(),"<br>";
  22. echo test2(),"<br>";
  23. echo test2(),"<br>","<hr>";
  24. namespace ns3;
  25. //定义函数,返回$k自增的值
  26. function test3() : int {
  27. //用static关键字,将$k声明为静态变量
  28. static $k = 0 ;
  29. return $k++;
  30. }
  31. //每次调用函数,返回的值都会+1
  32. echo test3(),"<br>";
  33. echo test3(),"<br>";
  34. echo test3(),"<br>";

变量过滤器

  • 获取过滤器

    1. int => 257
    2. boolean => 258
    3. float => 259
    4. validate_regexp => 272
    5. validate_domain => 277
    6. validate_url => 273
    7. validate_email => 274
    8. validate_ip => 275
    9. validate_mac => 276
    10. string => 513
    11. stripped => 513
    12. encoded => 514
    13. special_chars => 515
    14. full_special_chars => 522
    15. unsafe_raw => 516
    16. email => 517
    17. url => 518
    18. number_int => 519
    19. number_float => 520
    20. magic_quotes => 521
    21. add_slashes => 523
    22. callback => 1024
    1. foreach (filter_list() as $filter) {
    2. echo $filter . ' => ' . filter_id($filter) . '<br>';
    3. }
    4. echo '<hr>';
  • 过滤器用法举例

    • 过滤单个变量,filter_var()
    • 过滤单个变量,filter_var_array()
    • 检测是否存在指定的外部变量,filter_has_var()
    • 访问外部变量的过滤器,filter_input
    • 同时验证多个外部变量,filter_input_array()
  1. <?php
  2. // INPUT_GET: 表示要检测的是$_GET,就是get参数
  3. // INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV
  4. // 访问外部变量的过滤器,filter_input
  5. //校验get参数是否有page,并且页码是否大于等于1
  6. var_dump(filter_input(INPUT_GET, 'page',FILTER_VALIDATE_INT, ['options'=>['min_range'=>1]]));
  7. // 同时验证多个外部变量: filter_input_array()
  8. echo '<hr>';
  9. //校验name是否存在且为字符串
  10. //校验邮箱是否存在切格式正确
  11. $args = [
  12. 'username' => FILTER_SANITIZE_STRING,
  13. 'email' => FILTER_VALIDATE_EMAIL,
  14. ];
  15. var_dump(filter_input_array(INPUT_GET, $args));


常量

  • 常量声明:

    1. //define()函数
    2. define("常量名" ,常量值);
    3. // const 关键字
    4. const COURSE = 'PHP';
  • 常量名是一个字符串,通常使用大写英文表示,例如 CLASS_NAME , MYAGE等。

  • 常量可在函数内外进行访问
  • 常量只能存储布尔值,整型数据,浮点型数据和字符串数据,不能被改动。
  • 内置常量:常见列举
    • __FILE__:文件完整路径和文件名
    • __LINE__:PHP代码行数
    • PHP_VERSION:PHP版本
    • PHP_OS:执行php解析的操作系统
    • TRUE:真值
    • FALSE:伪值
    • E_ERROR:指到最近的代码错误
    • E_WARNING:最近的代码警告
    • E_PARSE:语法问题
    • E_NOTICE:异常提醒
    • __DIR__:文件所在目录
    • __FUNCTION__:函数被定义时的名字,区分大小写
    • __CLASS__:类被定义时的名字,区分大小写
  1. <?php
  2. define ("COUNTRE","China");
  3. const PROVINCE = "广州";
  4. echo COUNTRE;
  5. echo '<br>';
  6. echo constant("PROVINCE");
  7. echo '<br>';
  8. echo (__FILE__),'<br>';
  9. echo (__LINE__),'<br>';
  10. echo (PHP_VERSION),'<br>';
  11. echo (PHP_OS),'<br>';
  12. //定义类
  13. class FirstClass{
  14. //定义类函数
  15. function test(){
  16. echo (__FUNCTION__);
  17. echo '<br>';
  18. echo (__CLASS__);
  19. }
  20. }
  21. //创建类匿名对象调用类函数
  22. (new FirstClass)->test();

总结

  • 变量根据定义位置,具有不同的作用域,除了超全局变量可以无视作用域,全局变量和局部变量都要留意。可以通过 global或者$GLOBALS(),在函数中使用全局变量。
  • 理解静态变量,修饰符static,随着方法多次调用,变量值会受到上一次调用的影响。
  • 常量的2种定义方式,以及记住一些常用系统常量。
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议