批改状态:合格
老师批语:你的作业没按顺序来, 这是在补吗?
| 作用域 | 描述 |
|---|---|
| 函数作用域 | 使用function关键字创建的作用域 |
| 全局作用域 | 函数之外的变量生效范围 |
| 变量类型 | 描述 |
|---|---|
| 私有变量 | 函数中定义的变量 |
| 全局变量 | 函数之外定义的变量 |
| 超全局变量 | 也叫预定义变量,访问不受作用域限制 |
|变量名|描述|
|$GLOBALS|引用全局域中可用的全部变量|
|$_SERVER|服务器和执行环境信息|
|$_GET|http get 请求:通过url参数传递给当前脚本的变量的数组|
|$_POST|HTTP POST 请求:将变量以关联数组形式传入当前脚本|
|$_FILES|HTTP 文件上传变量,保存着上传文件的全部信息|
|$_COOKIE|通过HTTP Cookies方式传递给当前脚本的变量的数组|
|$_SESSION|当前脚本可用SESSION变量的数组|
|$_REQUEST|默认情况下包含了 $_GET,$_POST 和 $_COOKIE 的数组|
|$_ENV|通过换届方式传递给当前脚本的变量的数组|
<?php//超全局变量不需要定义,不需要初始化//$GLOBALS = .....;;# 变量作用域//全局作用域$siteName = 'php中文网';// 全局变量会自动注册也为超全局变量数组$GlOBALS的一个值// 超全局变量不受作用域限制print_r($GLOBALS['siteName']);// 声明函数: 同时也创建一个函数作用域function getInfo1(): string{//定义了一个函数“私有变量”// 方法1:globalglobal $siteName;$private = $siteName;return $private;}echo getInfo1();function getInfo2(): string{// 2. 使用超全局变量$private = $GLOBALS['siteName'];// 函数中可以直接访问超全局变量return $private;}echo getInfo2();//返回当前文件名称echo $_SERVER['SCRIPT_NAME'] . '<br>';?>

static修饰,并且与函数作用域绑定0
<?php# 静态变量namespace ns1;function test1(): float{//私有变量,也叫动态变量,在函数中每一次都会自动初始化//并且无法在多次调用过程中保持不变$sum = 0;$sum += 1;return $sum;}echo test1(), '<br>';echo test1(), '<br>';echo test1(), '<br>';echo '<hr>';//命名空间//不同的目录下面可以有相同的文件名namespace ns2;//全局变量$sum = 0;function test1(): float{global $sum;$sum += 1;return $sum;}echo test1(), '<br>';echo test1(), '<br>';echo test1(), '<br>';echo '<hr>';namespace ns3;function test1(): float{// 局部静态变量: 只在函数第一次调用的时候被初始化,以后不会再被更新了// 静态变量,可以理解为在函数中的"伪全局变量"// 实现函数在多次调用的过程中共享数据static $sum = 0;$sum += 1;return $sum;}echo test1(), '<br>';echo test1(), '<br>';echo test1(), '<br>';echo '<hr>';$num = 2;// 变量的本质是数据共享// 函数的本质是代码共享echo $num1 + 1;echo '<br>';echo $num1 + 5;echo '<br>';echo $num1 + 8;?>

<?php# 变量过滤器foreach (filter_list() as $filter) {echo $filter . '=>' . filter_id($filter) . '<br>';}echo '<hr>';?>

<?php# 变量过滤器//1.过滤单个变量filter_var()//过滤年龄$age = 30; //返回值int(30)$age = 12; //返回值 bool(flase)$age = 69; //返回值 bool(flase)var_dump(filter_var($age, FILTER_VALIDATE_INT, ['options' => ['min_range' => 18, 'max_range' => 68]]));echo '<hr>';$email = 'admin@php.cn';$email = 'admin@'; //返回值 bool(flase)var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));var_dump(filter_var($email, 274));echo '<hr>';// 2.过滤多个变量filter_var_array()var_dump(filter_var_array([100, 'php'], FILTER_VALIDATE_INT)); //[返回int(100),返回bool(false);]echo '<hr>';// 3.检测是否存在指定的外部变量,filter_has_var()// 对于url中的查询字符串:在url地址?后面的键值对// php.cn/index.php?// id=10// name=admin// INPUT_GET:表示要检测的是$_GET,就是get参数,其实就是get请求// INPUT_GET,INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENVvar_dump(filter_has_var(INPUT_GET, 'page')); //存在返回turevar_dump(filter_has_var(INPUT_GET, 'p')); // 不存在返回flaseecho '<hr>';echo 'get变量p=' . $_GET['page']; // 获取外部变量值echo '<hr>';// 4. 访问外部变量的过滤器,filter_inputvar_dump(filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, ['options' => ['min_range' => 1]]));// 5.同时验证多个外部变量:filter_input_array()echo '<hr>';$a = ['name' => FILTER_SANITIZE_STRING,'email' => FILTER_VALIDATE_EMAIL,// 'flags'=>FILTER_REQUIRE_SCALAR,限制标量'age' => ['filter' => FILTER_VALIDATE_INT, 'flags' => FILTER_REQUIRE_SCALAR, 'options' => ['min_range' => 18]],'blog' => FILTER_VALIDATE_URL,];// 标量:单值变量, 字符串, 布尔, 数值,// 复合: 对象, 数组var_dump(filter_input_array(INPUT_GET, $a));?>

| 特征 |
|---|
常量前面没有美元符号$ |
| 常量创建时必须初始化 |
| 常量禁止更新和删除 |
| 常量不受作用域限制 |
| 推荐使用大写字母加下划线命名 |
| 定义方式 | 描述 |
|---|---|
get_defined_constants() |
查看系统所有常量 |
defined() |
检测常量是否存在 |
define() |
创建常量 |
const 关键字 |
创建常量 |
constant() |
获取常量值 |
get_defined_constants(true): 常量分组打印,自定义常量在user分组defined(): 返回布尔值预定义常量非常多,有许多与具体扩展相关,如 PDO, 这里仅列出系统级常用的:
| 预定义常量 | 描述 |
|---|---|
PHP_VERSION |
PHP 版本 |
PHP_MAXPATHLEN |
PHP 路径最大长度:1024 |
PHP_OS_FAMILY |
操作系统:Windows/Darwin/Linux |
PHP_SAPI |
web 服务器与 php 之间接口: apache2handler |
PHP_EOL |
行尾结束符 |
PHP_INT_MAX |
最大整数: 9223372036854775807 |
PHP_INT_MIN |
最小整数: -9223372036854775808 |
PHP_INT_SIZE |
整数宽度: 8 |
PHP_FLOAT_MAX |
最大浮点数:1.7976931348623E+308 |
PHP_FLOAT_MIN |
整小浮点数: 2.2250738585072E-308 |
DEFAULT_INCLUDE_PATH |
默认 PHP 命令路径 |
PHP_EXTENSION_DIR |
默认 PHP 扩展路径 |
E_ERROR |
运行时错误: 致命中断 |
E_PARSE |
语法解析错误: 致命中断 |
E_NOTICE |
运行时提示: 不中断 |
E_WARNING |
运行时警告: 不中断 |
E_ALL |
所有级别错误(除E_STRICT) |
E_STRICT |
更加严格的错误处理机制,高于E_ALL |
TRUE |
布尔真 |
FALSE |
布尔假 |
NULL |
空 |
DIRECTORY_SEPARATOR |
目录分隔符 |
<?php#定义常量//define()函数define('TEACHER', '老师');//conts 关键字const COURSE = 'php';//常量不受作用域限制function test1(){echo TEACHER . '教:' . COURSE . '<br>';define('SEX', '男');echo SEX . '<br>';// const不能用在函数中// const AGE = 30;// echo AGE;}test1();echo '<hr>';//流程控制中,define能用,const不能用if (true) {define('EMAIL', 'admin@php.cn');// const EMAIL = 'admin@php.cn';echo EMAIL;}echo '<hr>';//const 用在类中,创建类常量class Demo{const HELLO = 'PHP.CN';// define('A',100);}echo Demo::HELLO . '<br>';// echo Demo::A.'<br>';// 常量通常只允许用标量进行初始化// 标量: 单值变量, 字符串, 数值,布尔, null// php7.0+支持数组初始化常量const DB_LINKS = ['host' => 'localhost','name' => 'root','password' => 'root','charset' => 'utf-8',];echo '<pre>' . print_r(DB_LINKS, true) . '</pre>';//constant()echo constant('TEACHER') . '<br>';echo TEACHER . '<br>';$constantName = 'EMAIL';echo constant($constantName);echo '<hr>';define('USER_NAME', '其实我是一个常量');echo USER_NAME;define('', '其实我是一个常量2');echo constant('');

| 魔术常量 | 描述 |
|---|---|
__LINE__ |
文件中的当前行号 |
__FILE__ |
文件的完整路径和文件名 |
__DIR__ |
文件所在目录 |
__FUNCTION__ |
当前的函数名称 |
__CLASS__ |
当前类名称 |
__TRAIT__ |
当前Trait名称 |
__METHOD__ |
当前类方法名称 |
__NAMESPACE__ |
当前命名空间名称 |
<?php#魔术常量echo '当前行号:' . __LINE__ . '<BR>';echo '当前文件:' . __FILE__ . '<BR>';echo '当前目录:' . __DIR__ . '<BR>';// 当前的函数名称function hello123(){echo __FUNCTION__;}hello123();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号