博客列表 >PHP变量和常量

PHP变量和常量

赵大叔
赵大叔原创
2020年04月17日 10:17:39655浏览

一、变量和常量基础知识

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.变量过滤器强行记忆,重点掌握,很有用

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议