批改状态:合格
老师批语:变量的知识 , 基本上都在这了, 覆盖的比较全面
php 中没有块作用域的概念, 这与其它编程语言不同, 请留意
| 序号 | 作用域 | 描述 |
|---|---|---|
| 1 | 函数作用域 | 使用function关键字创建的作用域 |
| 2 | 全局作用域 | 函数之外的变量生效范围 |
<?php# 变量作用域//全局作用域$siteName = '我爱php';//声明函数:相当于创建了一个函数作用域//返回一个字符串function getInfo(): string{//定义了一个函数私有变量(内部变量,局部变量)$private = $siteName;return $private;}echo getInfo();
如何获取到这个在函数外的全局变量赋值呢?这里有两种方法
方法一:告诉函数作用域,这里有一个变量是全局变量,global \$siteName;
方法二:使用超全局变量,全局变量默认就是超全局变量里面的子集,数学中叫做集合
超全局变量不需要声明,不需要赋值,不受作用域的限制
<?php# 变量作用域//全局作用域$siteName = '我爱php';//声明函数:相当于创建了一个函数作用域//全局变量默认是超全局变量数组的一个值,在数学的角度就是一个集合// $GLOBALS(访问不受作用域限制)//返回一个字符串function getInfo(): string{//定义了一个函数私有变量(内部变量,局部变量)// 方法一:global// global $siteName;// 方法二:使用超全局变量// 函数可以直接访问超全局变量$private = $GLOBALS['siteName'];return $private;}echo getInfo();
| 序号 | 变量类型 | 描述 |
|---|---|---|
| 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 |
通过环境方式传递给当前脚本的变量的数组 |
static修饰,并且与函数作用域绑定0函数中静态变量遵循私有变量约束, 全局不可访问
全局变量默认是静态的
使用静态变量,只在函数第一次调用的时候被初始化,可以一直保持值不变
<?php#静态变量function test1(): float{//私有变量/局部变量//该变量属于动态变量,即该变量离开了函数就不能使用//每次都会自动初始化0//无法在多次调用中保持不变$sum = 0;$sum = $sum + 1;return $sum;}echo test1();echo test1();echo test1();
function test1(): float{//全局中的变量默认是静态的//使用静态变量,只在函数第一次调用的时候被初始化,可以一直保持值不变static $sum = 0;$sum = $sum + 1;return $sum;}echo test1();echo test1();echo test1();
$num1 = 20;echo $num1 + 15;echo '<br>';echo $num1 + 55;echo '<br>';echo $num1 + 85;echo '<br>';echo $num1 + 105;
foreach()遍历数组filter过滤器filter_var()
<?php$age = 30;// 变量过滤器限制不符合的东西$age = '300';// 验证过程中都是把字符转为字符串//1.过滤单个变量filter_var()var_dump(filter_var($age, FILTER_VALIDATE_INT, ['options' => ['min_range' => 18, 'max_range' => 60]]));echo '<hr>';$email = 'admin@php.cn';$email = 'admin@';var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
filter_var_array()
<?php//2.过滤多个变量filter_var_array()echo '<hr>';var_dump(filter_var_array([100, 'php'], FILTER_VALIDATE_INT));
filter_has_var()
// 对于URL中的查询字符串:在URL地址?后面的键值对echo '<hr>';echo $_GET['p'];echo '<br>';//INPUT_GET:表示要检测的是$_GET,就是get参数,其实就是get请求var_dump(filter_has_var(INPUT_GET, 'p'));echo '<br>';echo 'get变量' . $_GET['p'];
echo '<br>';var_dump(filter_input(INPUT_GET, 'p', FILTER_VALIDATE_INT, ['options' => ['min_range' => 1]]));//url中的数据全是字符串//对值进行验证过滤
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,];//FILTER_REQUIRE_SCALAR 要求标量//标量:单值变量,字符串,布尔,数值//复合:对象,数组var_dump(filter_input_array(INPUT_GET, $args));
| 序号 | 特征 |
|---|---|
| 1 | 常量前面没有美元符号$ |
| 2 | 常量创建时必须初始化 |
| 3 | 常量禁止更新和删除 |
| 4 | 常量不受作用域限制 |
| 5 | 推荐使用大写字母加下划线命名 |
| 序号 | 定义方式 | 描述 |
|---|---|---|
| 1 | get_defined_constants() |
查看系统所有常量 |
| 2 | defined() |
检测常量是否存在 |
| 3 | define() |
创建常量 |
| 4 | const 关键字 |
创建常量 |
| 5 | constant() |
获取常量值 |
get_defined_constants(true): 常量分组打印,自定义常量在user分组defined(): 返回布尔值
如何查询常量
<?php# 常量// 常量是代码中不需要更新的数据// print_r(get_defined_constants());// 分组查看// print_r(get_defined_constants(true));define('APP_PATH', __DIR__ . '/app/admin');print_r(get_defined_constants(true)['user']);
# 使用函数define()define('LECTURE', '朱老师是我的讲师');//const 关键字const COURSE = 'php';// 常量不受作用域限制function test1(){echo LECTURE . '教:' . COURSE . '<br>';//define()可以用在函数中声明define('SEX', '男');echo SEX . '<br>';//const不能用于函数中}test1();
//const用在类中,创建类常量class Lemo{const HELLO = 'php.cn';}echo Lemo::HELLO . '<br>';
define()可以用在函数中声明,const 不能用于函数中
流程控制中,define 可以用,const 也不能用
const 用在类中,创建类常量
常量通常只允许用标量进行初始化
标量:单值变量,字符串,数值,布尔,null
const DB_LINKS = ['host' => 'localhost','username' => 'root','password' => 'root','charset' => 'utf8',];echo '<pre>' . print_r(DB_LINKS, true) . '</pre>';
echo和constant()输出常来给你的区别
//constant()echo constant('LECTURE') . '<br>';$constantName = 'EMAIL';echo constant($constantName);echo '<hr>';define('USER_NAME', '其实我也是一个常量');define('', '其实我也是一个常量');echo '';echo constant('');
常量隐藏在变量名中,以及常量是空的情况下需要使用 constant()
预定义常量非常多,有许多与具体扩展相关,如 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 | __LINE__ |
文件中的当前行号 |
| 2 | __FILE__ |
文件的完整路径和文件名 |
| 3 | __DIR__ |
文件所在目录 |
| 4 | __FUNCTION__ |
当前的函数名称 |
| 5 | __CLASS__ |
当前类名称 |
| 6 | __TRAIT__ |
当前Trait名称 |
| 7 | __METHOD__ |
当前类方法名称 |
| 8 | __NAMESPACE__ |
当前命名空间名称 |
<?php# 魔术常量echo '当前行号:' . __LINE__ . '<br>';echo '当前文件:' . __FILE__ . '<br>';echo '当前目录:' . __DIR__ . '<br>';function hello121(){echo __FUNCTION__;}hello121();echo '<hr>';class D{public function index(){echo __METHOD__;}}(new D)->index();
本节课重点学习了变量过滤器和常量的概念以及如何定义使用,发现变量的本质是为了实现数据共享,而常量是预定义或者自定义且禁止更新/删除。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号