一、变量作用域,又叫"变量范围", 也就是说变量的生效范围。又分以下两种:
函数作用域: 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语法格式,仍需要死记背牢,比如超全局变量和魔术常量。知道了静态变量一般常用来统计页面浏览次数和函数次数。