博客列表 >变量及常量的使用方法--PHP中文网线上班0416

变量及常量的使用方法--PHP中文网线上班0416

高的PHP十期培训学习笔记
高的PHP十期培训学习笔记原创
2020年05月21日 14:13:51726浏览

变量作用域

  • 超全局变量不需要定义,不需要初始化
  • 超全局变量不受作用域限制
  • 函数作用域: php 中只有函数可以创建作用域, 函数之外的代码全部在全局空间中

序号 作用域 描述
1 函数作用域 使用function关键字创建的作用域
2 全局作用域 函数之外的变量生效范围
  • 根据作用域不同, 变量可以分为三类:
序号 变量类型 描述
1 私有变量 函数中定义的变量
2 全局变量 函数之外定义的变量
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 通过环境方式传递给当前脚本的变量的数组

静态变量

变量的本质是数据共享
函数的本质是代码共享

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

变量过滤器

查看系统支持的过滤器

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

过滤实例

  1. // 1. 过滤单个变量filter_var()
  2. // 过滤年龄(数值)
  3. $age = 30;
  4. $age = '30';
  5. $age = 68;
  6. var_dump(filter_var($age, FILTER_VALIDATE_INT,['options'=>['min_range'=>18,'max_range'=>60]]));
  7. echo '<hr>';
  8. // 过滤邮箱
  9. $email = 'admin@php.cn';
  10. $email = 'admin@';
  11. var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
  12. // 支持直接使用过滤器的ID
  13. var_dump(filter_var($email, 274));
  14. echo '<hr>';
  15. // 2. 过滤多个变量filter_var_array()
  16. var_dump(filter_var_array([100, 'php'], FILTER_VALIDATE_INT));
  17. echo '<hr>';
  18. // 3. 检测是否存在指定的外部变量, filter_has_var()
  19. // 对于URL中的查询字符串: 在URL地址?后面的键值对
  20. // php.cn/index.php?
  21. // id=10
  22. // name=admin
  23. // INPUT_GET: 表示要检测的是$_GET,就是get参数,其实就是get请求
  24. // INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV
  25. var_dump(filter_has_var(INPUT_GET, 'page'));
  26. echo '<hr>';
  27. echo 'get变量p = ' . $_GET['p'];
  28. echo '<hr>';
  29. // 4. 访问外部变量的过滤器,filter_input
  30. var_dump(filter_input(INPUT_GET, 'p',FILTER_VALIDATE_INT, ['options'=>['min_range'=>1]]));
  31. // echo filter_input(INPUT_GET, 'p',FILTER_VALIDATE_INT, ['options'=>['min_range'=>1]]) ? '页码OK': '页码非法';
  32. echo '<hr>';
  33. // 5. 同时验证多个外部变量: filter_input_array()
  34. $args = [
  35. 'username' => FILTER_SANITIZE_STRING,
  36. 'email' => FILTER_VALIDATE_EMAIL,
  37. 'age' => ['filter' => FILTER_VALIDATE_INT, 'flags'=>FILTER_REQUIRE_SCALAR, 'options' => ['min_range' => 18]],
  38. 'blog' => FILTER_VALIDATE_URL,
  39. ];
  40. var_dump(filter_input_array(INPUT_GET, $args));

常量

常量是代码中不需要更新的数据

  1. // 查看一下当前系统中有哪些常量
  2. // print_r(get_defined_constants());
  3. // 分组查看
  4. // print_r(get_defined_constants(true));

1.1 常量的特征

序号 特征
1 常量前面没有美元符号$
2 常量创建时必须初始化
3 常量禁止更新和删除
4 常量不受作用域限制
5 推荐使用大写字母加下划线命名

1.3 定义常量

  • define()函数定义
    define('LECTURE', '朱老师');
  • const 关键字定义
    const COURSE = 'PHP';

1.4 常量的作用域

  • define 可以在函数中使用
  • const 不能在函数中使用
  1. // 常量不受作用域限制,可以直接在函数中访问
  2. function test1()
  3. {
  4. echo LECTURE . '教: ' . COURSE . '<br>';
  5. // define可以在函数中使用
  6. define('SEX', '男');
  7. echo SEX . '<br>';
  8. // const不能用在函数中
  9. // const AGE = 30;
  10. // echo AGE;
  11. }
  12. test1();
  • 流程控制中,define 能使用, const 不能使用
  1. // 流程控制中,define能用, const不能用
  2. if (true) {
  3. define('EMAIL', 'admin@php.cn');
  4. // const EMAIL = 'admin@php.cn';
  5. // echo EMAIL;
  6. }
  • const 可以用在类中,创建类常量
  • define 不可以用在类中
  1. class Demo
  2. {
  3. const HELLO = 'php.cn';
  4. // define('A', 100);
  5. }
  6. echo Demo::HELLO.'<br>';
  7. // echo Demo::A.'<br>';

1.5 常量的初始化

  • 常量通常只允许用标量进行初始化
  • 标量: 单值变量, 字符串, 数值,布尔, null
  • php7.0+支持数组初始化常量
  1. const DB_LINKS = [
  2. 'host'=>'localhost',
  3. 'username'=>'root',
  4. 'password'=>'root',
  5. 'charset'=>'utf8',
  6. ];
  7. echo '<pre>'.print_r(DB_LINKS,true).'</pre>';

1.6 函数/关键字

序号 定义方式 描述
1 get_defined_constants() 查看系统所有常量
2 defined() 检测常量是否存在
3 define() 创建常量
4 const 关键字 创建常量
5 constant() 获取常量值
  • get_defined_constants(true): 常量分组打印,自定义常量在user分组
  • defined(): 返回布尔值

1.7 常量的打印

constant()

1.8 预定义常量

预定义常量非常多,有许多与具体扩展相关,如 PDO, 这里仅列出系统级常用的:

序号 预定义常量 描述
1 PHP_VERSION PHP 版本
2 PHP_MAXPATHLEN PHP 路径最大长度:1024
3 PHP_OS_FAMILY 操作系统:Windows/Darwin/Linux
4 PHP_SAPI web 服务器与 php 之间接口: apache2handler
5 PHP_EOL 行尾结束符
6 PHP_INT_MAX 最大整数: 9223372036854775807
7 PHP_INT_MIN 最小整数: -9223372036854775808
8 PHP_INT_SIZE 整数宽度: 8
9 PHP_FLOAT_MAX 最大浮点数:1.7976931348623E+308
10 PHP_FLOAT_MIN 整小浮点数: 2.2250738585072E-308
11 DEFAULT_INCLUDE_PATH 默认 PHP 命令路径
12 PHP_EXTENSION_DIR 默认 PHP 扩展路径
13 E_ERROR 运行时错误: 致命中断
14 E_PARSE 语法解析错误: 致命中断
15 E_NOTICE 运行时提示: 不中断
16 E_WARNING 运行时警告: 不中断
17 E_ALL 所有级别错误(除E_STRICT)
18 E_STRICT 更加严格的错误处理机制,高于E_ALL
19 TRUE 布尔真
20 FALSE 布尔假
21 NULL
22 DIRECTORY_SEPARATOR 目录分隔符

更多预定义常量:https://www.php.net/manual/zh/reserved.constants.php

1.9 魔术常量

  • 魔术常量也属于”预定义常量”, 比较特殊所有单独列出
  • 所谓”魔术”, 是指常量的值, 会随它们在代码中的位置改变而改变
  • 魔术常量不区分大小写, 但是推荐全部大写
序号 魔术常量 描述
1 __LINE__ 文件中的当前行号
2 __FILE__ 文件的完整路径和文件名
3 __DIR__ 文件所在目录
4 __FUNCTION__ 当前的函数名称
5 __CLASS__ 当前类名称
6 __TRAIT__ 当前Trait名称
7 __METHOD__ 当前类方法名称
8 __NAMESPACE__ 当前命名空间名称
1.9.1 魔术常量的使用
  • 直接使用
  1. echo '当前行号: ' . __LINE__ . '<br>';
  2. echo '当前文件: ' . __FILE__ . '<br>';
  3. echo '当前目录: ' . __DIR__ . '<br>';
  • 在函数中在使用
  1. function hello123()
  2. {
  3. echo __FUNCTION__;
  4. }
  5. hello123();
  • 在类中在使用
  1. class D
  2. {
  3. public function index()
  4. {
  5. echo __METHOD__;
  6. }
  7. }
  8. (new D)->index();
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议