博客列表 >服务端 - PHP - 基础知识之变量、常量和数据类型

服务端 - PHP - 基础知识之变量、常量和数据类型

郴
原创
2020年04月20日 15:25:05999浏览

服务端 - PHP - 基础知识之变量、常量和数据类型

一、变量

1. 概述

序号 内容 描述
1 解释 变量是用于存储数据的容器
2 定义方式 $符。如$var_name
3 变量类型 因为 php 是弱类型语言,不需要在定义变量前声明变量的类型,所以变量的类型由变量的值决定
4 赋值 =号。如$name="peter"
5 传递方式 1.值传递:操作副本。将原变量的值赋值给一个新变量<br> 2.引用传递:控制指针。给原变量起一个别名
6 使变量变成引用传递 在变量前加&取地址符。如&$name="Leo"
7 可变变量 变量名称可以动态改变,变量名来自另一个变量
8 作用域 1.函数作用域:使用function关键字创建的作用域,作用在函数作用域的变量有私有变量和静态变量。<br> 2.全局作用域:函数之外的变量生效范围,作用在全局作用域的变量有全局变量和超全局变量。
9 分类 1.私有变量:函数中定义的变量<br> 2.全局变量:函数之外定义的变量<br> 3.超全局变量:也叫预定义变量,访问不受作用域限制
10 过滤器 用于对来自非安全来源的数据(比如用户输入)进行验证和过滤
11 注意事项 变量已定义而未初始化,默认使用 NULL 进行赋值

2. 可变变量

序号 内容 描述
1 定义方式 在变量前再加一个$符。如$$name

3. 私有变量

序号 内容 描述
1 解释 也叫动态变量,在函数中每一次都会自动初始化,并且无法在多次调用过程中保持不变
2 作用域 函数作用域

4. 静态变量

序号 内容 描述
1 解释 定义在函数内部,静态变量的值不会因为退出函数而销毁
2 定义方式 在变量前加static关键字。如static $name
3 作用域 函数作用域
4 特点 1.在定义时必须初始化,且只能初始化一次,只能初始化为字符值或常量,默认为’0’<br> 2.静态变量的值,可以在函数的多次调用中保持不变,即可带入下次调用中<br> 3.当程序执行离开函数作用域后,静态变量的值不丢失
5 应用场景 实现累加效果:当多次调用同一函数,且要求每次调用之间共享或保留某些变量的时候

5. 全局变量

序号 内容 描述
1 解释 函数之外定义的变量
2 作用域 全局作用域
3 函数作用域内使用全局变量的方式 1.使用 global 关键字<br> 2.使用$GLOBALS 超全局数组

6. 超全局变量

序号 变量 描述
1 $GLOBALS 引用全局作用域中可用的全部变量
2 $_SERVER 服务器和执行环境信息
3 $_GET HTTP GET 请求:通过 URL 参数传递给当前脚本的变量的数组
4 $_POST HTTP POST 请求: 将变量以关联数组形式传入当前脚本
5 $_FILES HTTP 文件上传变量,保存着上传文件的全部信息
6 $_REQUEST 默认情况下包含了 $_GET$_POST$_COOKIE 的数组
7 $_COOKIE 通过 HTTP Cookies 方式传递给当前脚本的变量的数组
8 $_SESSION 当前脚本可用 SESSION 变量的数组
9 $_ENV 通过环境方式传递给当前脚本的变量的数组

7. 变量过滤器

序号 函数 描述
1 filter_list() 查看系统中所有过滤器
2 filter_id() 查看所有过滤器 id
3 filter_var() 过滤单个变量
4 filter_var_array() 同时过滤多个变量
5 filter_has_var() 检测是否存在指定的外部变量
6 filter_input() 更安全的外部变量过滤器
7 filter_input_array() 同时过滤多个外部变量

8. 代码示例

  1. <?php
  2. echo '<h3>';
  3. echo "一、使用静态变量实现累加效果";
  4. echo'</h3>';
  5. $sum = function() {
  6. static $n = 0;
  7. $n += 1;
  8. return $n;
  9. };
  10. echo $sum();
  11. echo '<br>';
  12. echo $sum();
  13. echo '<br>';
  14. echo $sum();
  15. echo '<br>';
  16. echo '<hr>';
  17. echo '<h3>';
  18. echo "二、函数作用域内使用全局变量的方式";
  19. echo'</h3>';
  20. echo '<h4>';
  21. echo "1. 使用global关键字";
  22. echo'</h4>';
  23. $name = "小明1";
  24. echo "我的名字叫" . $name;
  25. function sayMyName1() {
  26. global $name;
  27. $name = "小红1";
  28. echo '<br>';
  29. echo "我的名字叫" . $name;
  30. }
  31. echo sayMyName1();
  32. echo '<h4>';
  33. echo "2. 使用\$GLOBALS超全局变量数组";
  34. echo'</h4>';
  35. $name = "小明2";
  36. echo "我的名字叫" . $name;
  37. function sayMyName2() {
  38. $GLOBALS['name'] = "小红2";
  39. echo '<br>';
  40. echo "我的名字叫" . $GLOBALS['name'];
  41. }
  42. echo sayMyName2();
  43. echo '<hr>';
  44. echo '<h3>';
  45. echo "三、使用变量过滤器过滤变量";
  46. echo'</h3>';
  47. echo '<h4>';
  48. echo "1. 过滤单个变量";
  49. echo'</h4>';
  50. $n = 10;
  51. if (filter_var($n, 257)) :
  52. echo "已过滤1";
  53. else :
  54. echo "error2";
  55. endif;
  56. echo '<br>';
  57. $n = 10.2;
  58. if (filter_var($n, 257)) :
  59. echo "已过滤1";
  60. else :
  61. echo "error2";
  62. endif;
  63. echo '<h4>';
  64. echo "2. 同时过滤多个变量";
  65. echo'</h4>';
  66. echo "全部变量过滤成功";
  67. $data = ["name"=>"Peter", "age"=>12, "email"=>"xiaoming@qq.com"];
  68. $filters = [
  69. "name"=>["filter"=>FILTER_VALIDATE_REGEXP, "options"=>["regexp"=>"/^P(.*)/"]],
  70. "age"=>["filter"=>FILTER_VALIDATE_INT, "options"=>["min_range"=>10, "max_range"=>15]],
  71. "email"=>FILTER_VALIDATE_EMAIL
  72. ];
  73. echo '<pre>';
  74. print_r(filter_var_array($data, $filters));
  75. echo '</pre>';
  76. echo "\$name变量过滤失败";
  77. $data = ["name"=>"peter", "age"=>12, "email"=>"xiaoming@qq.com"];
  78. $filters = [
  79. "name"=>["filter"=>FILTER_VALIDATE_REGEXP, "options"=>["regexp"=>"/^P(.*)/"]],
  80. "age"=>["filter"=>FILTER_VALIDATE_INT, "options"=>["min_range"=>10, "max_range"=>15]],
  81. "email"=>FILTER_VALIDATE_EMAIL
  82. ];
  83. echo '<pre>';
  84. print_r(filter_var_array($data, $filters));
  85. echo '</pre>';
  86. echo '<h4>';
  87. echo "3. 显示所有过滤器ID";
  88. echo'</h4>';
  89. echo '<table style="border: 1px solid black; border-collapse: collapse">';
  90. foreach (filter_list() as $key => $value) {
  91. echo '<tr style="border: 1px solid black">'.'<td style="border: 1px solid black">'.$value.'</td>'.'<td>'.filter_id($value).'</td>'.'</tr>';
  92. }
  93. echo '</table>';
  94. ?>


二、常量

1. 概述

序号 内容 描述
1 解释 常量是值的标识符,但值无法更变
2 定义方式 1.使用 define()函数:不能用在类中<br> 2.使用 const 关键字:可以用在类中,不能用在函数和流程控制中
3 作用域 不受限制
4 特点 1.创建时必须初始化<br>2.禁止更新和删除<br>3.不受作用域限制
5 注意事项 推荐使用大写字母加下划线命名

2. 预定义常量

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

3. 魔术常量

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

三、数据类型

序号 内容 描述
1 解释 固定大小内存的别名。给不同的数据分配合适的空间,确定合适的存储形式
2 特点 动态类型(弱类型)。不需要在使用变量前声明变量的类型,相同的变量可以用作不同的类型
3 分类 1.标量:字符串、整型、浮点型、布尔<br>2.复合:数组、对象<br>3.特殊:null<br>4.资源:resource
4 判断 is_string()is_int()is_bool()
5 转换 strval()intval()

四、课程总结

  • 今天学习了 PHP 的基础知识,通过上课认真听讲和认真完成老师布置的作业,使得我对 PHP 的理解和运用更加深入和熟悉。最主要的知识点是明白了变量、常量和数据类型的特点,以及了解并熟悉了变量、常量和数据类型的常用的操作。
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议