Blogger Information
Blog 17
fans 0
comment 0
visits 13602
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
php变量作用域过滤器与常量
ROC-Y
Original
673 people have browsed it

变量

作用域

  • 变量作用域,即变量的生效范围。
  • 函数作用域:函数里面创建的作用域
  • 全局作用域:函数之外的变量生效范围
  • 变量类型:
    • 私有变量,函数中定义,作用域在函数
    • 全局变量,函数外定义的变量,不能被函数直接使用
    • 超全局变量,也叫预定义变量,访问不受作用域限制
  • 超全局变量,也叫超全局数组,随系统加载,因此在所有脚本中均有定义,全局和函数中都可以访问
序号 变量名 描述
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种定义方式,以及记住一些常用系统常量。
Correcting teacher:天蓬老师天蓬老师

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