Blogger Information
Blog 119
fans 3
comment 1
visits 94362
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP变量和常量
赵大叔
Original
656 people have browsed it

一、变量和常量基础知识

1.变量作用域:php 中没有块作用域

序号 作用域 描述
1 函数作用域 使用function关键字创建的作用域
2 全局作用域 函数之外的变量生效范围

2.根据变量作用域分类变量

序号 变量类型 描述
1 私有变量 函数中定义的变量
2 全局变量 函数之外定义的变量
3 超全局变量 也叫预定义变量,访问不受作用域限制

3.超全局变量

序号 变量名 描述
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 通过环境方式传递给当前脚本的变量的数组

4.静态变量

  • 4.1 定义在函数中的静态变量使用static修饰,并且与函数作用域绑定
  • 4.2 静态变量定义时必须初始化,且只能初始化一次,默认为0
  • 4.3 当程序执行离开函数作用域后,静态变量的值不丢失
  • 4.4 静态变量的值,可以在函数的多次调用中保持不变,即可带入下次调用中
  • 4.5 函数中静态变量遵循私有变量约束, 全局不可访问

5.变量过滤器

5.1 查看所有变量过滤器

  1. foreach (filter_list() as $filter) {
  2. echo $filter . ' => ' . filter_id($filter) . '<br>';
  3. }

5.2 常用过滤器

  • 1.filter_has_var(类型,变量), 检测是否存在指定类型的变量
    ,只检查动态提交数据
  • 2.INPUT_GET:GET 方式提交
  • 3.INPUT_POST:POST 方式提交
  • 4.INPUT_SERVER:服务器变量
  • 5.INPUT_COOKIE:cookie
  • 6.INPUT_GET:GET 方式提交
  • 7.INPUT_POST:POST 方式提交
  • 8.INPUT_SERVER:服务器变量
  • 9.INPUT_COOKIE:cookie

6、常量

1.定义常量:define函数,const关键字—类专用

2.魔术常量:根据调用场景不同值会变的常量

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

二、代码演示

1.变量作用域

  1. <?php
  2. // 全局作用域
  3. $userName = 'dashu';
  4. // $GlOBALS:超全局变量数组
  5. // 全局变量会自动注册成为$GlOBALS的一个值
  6. //print_r($GLOBALS);
  7. // 声明函数: 同时也创建一个函数作用域
  8. function getInfo() : string
  9. {
  10. // 定义了一个函数"私有变量"
  11. // 1. 方法1: global
  12. // global $userName;
  13. // 2. 使用超全局变量数组
  14. $private = $GLOBALS['userName'];
  15. // 超全局变量不受作用域限制
  16. // SCRIPT_NAME: 当前脚本名称
  17. echo $_SERVER['SCRIPT_NAME']. '<br>';
  18. return $private;
  19. }
  20. echo getInfo() . '<br>';
  21. echo $_SERVER['SCRIPT_NAME']. '<br>';

2.静态变量

  1. <?php
  2. // 静态变量
  3. namespace ns1;
  4. function test1(): float
  5. {
  6. // 私有变量,也叫动态变量,在函数中每一次都会自动初始化
  7. // 并且无法在多次调用过程中保持不变
  8. $sum = 0;
  9. $sum = $sum + 1;
  10. return $sum;
  11. }
  12. echo test1(), '<br>';
  13. echo test1(), '<br>';
  14. echo test1(), '<br>';
  15. echo '<hr>';
  16. namespace ns3;
  17. function test1(): float
  18. {
  19. // 局部静态变量: 只在函数第一次调用的时候被初始化,以后不会再被更新了
  20. // 静态变量,可以理解为在函数中的"伪全局变量"
  21. // 实现函数在多次调用的过程中共享数据
  22. static $sum = 0;
  23. $sum = $sum + 1;
  24. return $sum;
  25. }
  26. echo test1(), '<br>';
  27. echo test1(), '<br>';
  28. echo test1(), '<br>';
  29. echo '<hr>';
  30. $num1 = 20;
  31. // 变量的本质是数据共享,数据复用
  32. // 函数的本质是代码共享,代码复用
  33. echo $num1 + 40;
  34. echo '<br>';
  35. echo $num1 + 20;
  36. echo '<br>';
  37. echo $num1 + 90;

3.变量过滤器:通过返回变量,不通过返回false

  1. <?php
  2. // 变量过滤器:通过返回变量,不通过返回false
  3. //foreach (filter_list() as $filter) {
  4. // echo $filter . ' => ' . filter_id($filter) . '<br>';
  5. //}
  6. //echo '<hr>';
  7. // 1. 过滤单个变量filter_var()
  8. // 过滤整数
  9. $age = 30;
  10. $age = '30';
  11. $age = 68;
  12. var_dump(filter_var($age, FILTER_VALIDATE_INT,['options'=>['min_range'=>18,'max_range'=>60]]));
  13. echo '<hr>';
  14. // 过滤邮箱
  15. $email = 'zhangsan@qq.com';
  16. $email = 'zhangsan@';
  17. var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
  18. // 274邮箱过滤器编号
  19. var_dump(filter_var($email, 274));
  20. echo '<hr>';
  21. // 2. 过滤多个变量filter_var_array()
  22. var_dump(filter_var_array([88, 'dashu'], FILTER_VALIDATE_INT));
  23. echo '<hr>';
  24. // 3. 检测是否存在指定的外部变量--URL中的查询字符串, filter_has_var()
  25. // INPUT_GET: 表示要检测的是$_GET,就是get参数,其实就是get请求
  26. // INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV
  27. var_dump(filter_has_var(INPUT_GET, 'page'));
  28. echo '<hr>';
  29. //echo 'get变量p = ' . $_GET['p'];
  30. //echo '<hr>';
  31. // 4. 访问外部变量的过滤器,filter_input
  32. var_dump(filter_input(INPUT_GET, 'p',FILTER_VALIDATE_INT, ['options'=>['min_range'=>1]]));
  33. // echo filter_input(INPUT_GET, 'p',FILTER_VALIDATE_INT, ['options'=>['min_range'=>1]]) ? '页码OK': '页码非法';
  34. // 5. 同时验证多个外部变量: filter_input_array()
  35. echo '<hr>';
  36. $args = [
  37. 'username' => FILTER_SANITIZE_STRING,
  38. 'email' => FILTER_VALIDATE_EMAIL,
  39. 'age' => ['filter' => FILTER_VALIDATE_INT, 'flags'=>FILTER_REQUIRE_SCALAR, 'options' => ['min_range' => 18]],
  40. 'blog' => FILTER_VALIDATE_URL,
  41. ];
  42. // 标量:单值变量, 字符串, 布尔, 数值,
  43. // 复合: 对象, 数组
  44. // http://php.io/0416/demo3.php?p=3&username=dashu&email=dashu@qq.com&age=30&blog=php.cn
  45. var_dump(filter_input_array(INPUT_GET, $args));

三、总结

1.php只有函数会创建作用域,global$GlOBALS,跨作用域访问。

2.static修饰的变量相当于函数内的全局变量,减少全局变量的占用。

3.变量过滤器强行记忆,重点掌握,很有用

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