Correcting teacher:天蓬老师
Correction status:qualified
Teacher's comments:任何行业, 一开始总是免不了死记硬背, 所谓捷径是不存在的...
就像习武之人的绝招, 就是天天重复使用的那几招, 看上去简单, 但架不住天天练习
一、变量作用域,又叫"变量范围", 也就是说变量的生效范围。又分以下两种:
函数作用域: php 中只有函数可以创建作用域, 函数之外的代码全部在全局空间中,使用‘function’关键字创建的作用域。
全局作用域:函数之外的变量生效范围。
举例说明:
<?php # 变量作用域 // 全局作用域 $myName = 'emy'; // 全局变量会自动注册也为超全局变量数组$GlOBALS的一个值 // 超全局变量不受作用域限制 // print_r($GLOBALS['myName']); // 声明函数: 同时也创建一个函数作用域 function getInfo() : string { $private = $GLOBALS['myName']; // 函数中可以直接访问超全局变量 echo $_SERVER['SCRIPT_NAME']. '<br>'; return $private; } echo getInfo(); echo $_SERVER['SCRIPT_NAME']
3.根据作用域不同, 变量可以分为三类:
变量类型 | 描述 |
---|---|
私有变量 | 函数中定义的变量() |
全局变量 | 函数之外定义的变量(global) |
超全局变量 | 也叫预定义变量,访问不受作用域限制() |
举例说明:
<?php // 私有变量 function news(): float { // 私有变量,也叫动态变量,在函数中每一次都会自动初始化 // 并且无法在多次调用过程中保持不变 $count = 3; $count = $count - 1; return $count; } echo news(), '<br>'; echo news(), '<br>'; echo news(), '<br>'; // 全局变量 $count = 10; function news(): float { global $count; $sum = $sum + 1; return $count; } echo news(), '<br>'; echo news(), '<br>'; echo news(), '<br>'; // 静态变量:实现函数在多次调用中,用于共享数据 function news(): float { static $count = 20; $count = $count + 1; return $count; } echo news(), '<br>'; echo news(), '<br>'; echo news(), '<br>'; $count = 5; echo $count + 40; echo '<br>'; echo $count + 20; echo '<br>'; echo $count + 90; // 总结:变量的本质是数据共享,函数的本质是代码共享
二、变量过滤器:实现比如表单输入数据的验证,分以下几种:
变量类型 | 描述 |
---|---|
过滤单个变量 | filter_var() |
过滤多个变量 | filter_var_array() |
检测外部变量 | filter_has_var() |
访问外部变量的过滤器 | filter_input() |
验证多个外部变量 | filter_input_array() |
举例说明:
<?php # 变量过滤器 // 1. 过滤单个变量filter_var() // 次数 $cishu = 15; $cishu = '15'; $cishu = 15; var_dump(filter_var($cishu, FILTER_VALIDATE_INT,['options'=>['min_range'=>10,'max_range'=>20]])); echo '<hr>'; $email = 'emy@qq.com'; $email = 'emy@'; var_dump(filter_var($email, FILTER_VALIDATE_EMAIL)); var_dump(filter_var($email, 274)); // 2. 过滤单个变量filter_var_array() var_dump(filter_var_array([100, 'php'], FILTER_VALIDATE_INT)); // 3. 检测是否存在指定的外部变量, filter_has_var() // 对于URL中的查询字符串: 在URL地址?后面的键值对 // php.edu/index.php? // id=10 // name=admin // INPUT_GET: 表示要检测的是$_GET,就是get参数,其实就是get请求 // INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV var_dump(filter_has_var(INPUT_GET, 'page')); echo 'get变量p = ' . $_GET['p']; // 4. 访问外部变量的过滤器,filter_input var_dump(filter_input(INPUT_GET, 'p',FILTER_VALIDATE_INT, ['options'=>['min_range'=>1]])); // 5. 同时验证多个外部变量: filter_input_array() $args = [ 'username' => FILTER_SANITIZE_STRING, 'email' => FILTER_VALIDATE_EMAIL, 'age' => ['filter' => FILTER_VALIDATE_INT, 'flags'=>FILTER_REQUIRE_SCALAR, 'options' => ['min_range' => 18]], 'blog' => FILTER_VALIDATE_URL, ]; var_dump(filter_input_array(INPUT_GET, $args));
三、常量:常量是单个值的标识符(名称)。在脚本中无法改变该值。
有效的常量名:以字符或下划线开头(前面没有 $ 符号),常量创建时必须用标量初始化。
注:常量不受作用域限制。
定义方式 | 描述 |
---|---|
get_defined_constants() | 查看系统所有常量 |
defined() | 检测常量是否存在 |
define() | 创建常量,返回布尔值 |
const 关键字 | 创建常量,用在类中,创建类常量 |
constant() | 获取常量值 |
预定义常量
预定义常量非常多,以下是最常用的22个常量,具体和其它扩展相关的知识,可点这里查看
序号 | 预定义常量 | 描述 |
---|---|---|
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 | __LINE__ | 文件中的当前行号 |
2 | __FILE__ | 文件的完整路径和文件名 |
3 | __DIR__ | 文件所在目录 |
4 | __FUNCTION__ | 当前的函数名称 |
5 | __CLASS__ | 当前类名称 |
6 | __TRAIT__ | 当前Trait 名称 |
7 | __METHOD__ | 当前类方法名称 |
8 | __NAMESPACE__ | 当前命名空间名称 |
四、学习总结:对变量、过滤器和常量有一个最基本的认识。对于固定的一些PHP语法格式,仍需要死记背牢,比如超全局变量和魔术常量。知道了静态变量一般常用来统计页面浏览次数和函数次数。