博客列表 >PHP基础知识常量、变量、过滤器学习小结

PHP基础知识常量、变量、过滤器学习小结

马晓宁
马晓宁原创
2020年04月17日 23:08:32760浏览

常量

1. 特征

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

2. 函数/关键字

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

3. 预定义常量

预定义常量非常多,有许多与具体扩展相关,如 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 目录分隔符

示例

  1. <?php
  2. # 定义常量
  3. // define()函数
  4. define('LECTURE', '朱老师');
  5. // const 关键字
  6. const COURSE = 'PHP';
  7. // 常量不受作用域限制
  8. function test1()
  9. {
  10. echo LECTURE . '教: ' . COURSE . '<br>';
  11. define('SEX', '男');
  12. echo SEX . '<br>';
  13. // const不能用在函数中
  14. // const AGE = 30;
  15. // echo AGE;
  16. }
  17. test1();
  18. echo '<hr>';
  19. // 流程控制中,define能用, const不能用
  20. if (true) {
  21. define('EMAIL', 'admin@php.cn');
  22. // const EMAIL = 'admin@php.cn';
  23. // echo EMAIL;
  24. }
  25. // const用在类中,创建类常量
  26. class Demo
  27. {
  28. const HELLO = 'php.cn';
  29. // define('A', 100);
  30. }
  31. echo Demo::HELLO.'<br>';
  32. // echo Demo::A.'<br>';
  33. // 常量通常只允许用标量进行初始化
  34. // 标量: 单值变量, 字符串, 数值,布尔, null
  35. // php7.0+支持数组初始化常量
  36. const DB_LINKS = [
  37. 'host'=>'localhost',
  38. 'username'=>'root',
  39. 'password'=>'root',
  40. 'charset'=>'utf8',
  41. ];
  42. echo '<pre>'.print_r(DB_LINKS,true).'</pre>';
  43. // constant()
  44. echo constant('LECTURE'). '<br>';
  45. echo LECTURE. '<br>';
  46. $constantName = 'EMAIL';
  47. echo constant($constantName);
  48. echo '<hr>';
  49. define('USER_NAME', '其实我也是一个常量');
  50. define('', '其实我也是一个常量');
  51. echo '';
  52. echo constant('');

4. 魔术常量

  • 魔术常量也属于”预定义常量”, 比较特殊所有单独列出
  • 所谓”魔术”, 是指常量的值, 会随它们在代码中的位置改变而改变
  • 魔术常量不区分大小写, 但是推荐全部大写
序号 魔术常量 描述
1 __LINE__ 文件中的当前行号
2 __FILE__ 文件的完整路径和文件名
3 __DIR__ 文件所在目录
4 __FUNCTION__ 当前的函数名称
5 __CLASS__ 当前类名称
6 __TRAIT__ 当前Trait名称
7 __METHOD__ 当前类方法名称
8 __NAMESPACE__ 当前命名空间名称

变量

1.变量过滤器

几乎所有的 Web 应用程序都依赖外部的输入。这些数据通常来自用户或其他应用程序(比如 web 服务)。通过使用过滤器,您能够确保应用程序获得正确的输入类型。

序号 函数 描述
1 filter_var() 通过一个指定的过滤器来过滤单一的变量
2 filter_var_array() 通过相同的或不同的过滤器来过滤多个变量
3 filter_input 获取一个输入变量,并对它进行过滤
4 filter_input_array 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤
5 filter_ has_var() 检测是否存在指定的外部变量

示例

  1. <?php
  2. $filters = array
  3. (
  4. "name" => array
  5. (
  6. "filter"=>FILTER_SANITIZE_STRING
  7. ),
  8. "age" => array
  9. (
  10. "filter"=>FILTER_VALIDATE_INT,
  11. "options"=>array
  12. (
  13. "min_range"=>1,
  14. "max_range"=>120
  15. )
  16. ),
  17. "email"=> FILTER_VALIDATE_EMAIL,
  18. );
  19. $result = filter_input_array(INPUT_GET, $filters);
  20. if (!$result["age"])
  21. {
  22. echo("Age must be a number between 1 and 120.<br />");
  23. }
  24. elseif(!$result["email"])
  25. {
  26. echo("E-Mail is not valid.<br />");
  27. }
  28. else
  29. {
  30. echo("User input is valid");
  31. }
  32. ?>

例子解释:
上面的示例有三个通过 “GET” 方法传送的输入变量 (name, age and email)

设置一个数组,其中包含了输入变量的名称,以及用于指定的输入变量的过滤器
调用 filter_input_array 函数,参数包括 GET 输入变量及刚才设置的数组
检测 $result 变量中的 “age” 和 “email” 变量是否有非法的输入。(如果存在非法输入,)

2. 作用域

  • 变量作用域,也叫”变量范围”, 即定义变量时的上下文环境
  • 变量作用域,通俗的说,就是变量的生效范围
  • 一个变量必定属于一个作用域, 这个作用域也包括了当前作用域中引入其它文件
  • 也有不受作用域限制的变量,例如超全局变量, 在程序中任何地方都是有定义的
  • 函数作用域: php 中只有函数可以创建作用域, 函数之外的代码全部在全局空间中
序号 作用域 描述
1 函数作用域 使用function关键字创建的作用域
2 全局作用域 函数之外的变量生效范围
  • php 中没有块作用域的概念, 这与其它编程语言不同, 请留意
  • 根据作用域不同, 变量可以分为三类:
序号 变量类型 描述
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. <?php
  2. // 超全局变量不需要定义,不需要初始化
  3. // $GLOBALS = ....;;
  4. # 变量作用域
  5. // 全局作用域
  6. $siteName = 'php中文网';
  7. // 全局变量会自动注册也为超全局变量数组$GlOBALS的一个值
  8. // 超全局变量不受作用域限制
  9. // print_r($GLOBALS['siteName']);
  10. // 声明函数: 同时也创建一个函数作用域
  11. function getInfo() : string
  12. {
  13. // 定义了一个函数"私有变量"
  14. // 1. 方法1: global
  15. // global $siteName;
  16. // 2. 使用超全局变量
  17. $private = $GLOBALS['siteName'];
  18. // 函数中可以直接访问超全局变量
  19. echo $_SERVER['SCRIPT_NAME']. '<br>';
  20. return $private;
  21. }
  22. echo getInfo();
  23. echo $_SERVER['SCRIPT_NAME']. '<br>';

3. 静态变量

3.1 基本常识

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

3.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. // 命名空间
  17. // 不同的目录下面可以有相同的文件名
  18. namespace ns2;
  19. // 全局变量
  20. $sum = 0;
  21. function test1(): float
  22. {
  23. global $sum;
  24. $sum = $sum + 1;
  25. return $sum;
  26. }
  27. echo test1(), '<br>';
  28. echo test1(), '<br>';
  29. echo test1(), '<br>';
  30. echo '<hr>';
  31. namespace ns3;
  32. function test1(): float
  33. {
  34. // 局部静态变量: 只在函数第一次调用的时候被初始化,以后不会再被更新了
  35. // 静态变量,可以理解为在函数中的"伪全局变量"
  36. // 实现函数在多次调用的过程中共享数据
  37. static $sum = 0;
  38. $sum = $sum + 1;
  39. return $sum;
  40. }
  41. echo test1(), '<br>';
  42. echo test1(), '<br>';
  43. echo test1(), '<br>';
  44. echo '<hr>';
  45. $num1 = 20;
  46. // 变量的本质是数据共享
  47. // 函数的本质是代码共享
  48. echo $num1 + 40;
  49. echo '<br>';
  50. echo $num1 + 20;
  51. echo '<br>';
  52. echo $num1 + 90;

总结

本节课学习了变量以及常量的基础知识,通过本节课的学习使我知道了一个新的知识点变量过滤器,学习了如何查询变量过滤器以及变量过滤器的使用语法,对一些以前了解的知识进行了巩固和补充。这是我的一些总结与大家分享,有不恰当的地方欢迎大家多多指正,我也会虚心的接受大家的建议,希望和大家共同进步。

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