批改状态:合格
老师批语:写的很好!效果图展示方式挺好!不过编辑器代码和浏览器结果可以放大些。
作用域作用:
1.变量的生效范围
2.作用域是直接查找变量的工具
代码示例:
<?php// 显示错误error_reporting(E_ALL);// 作用域// 1.全局作用域$sitenName = 'PHP中文网';// 2.函数作用域function getInfo(){$name = 'peter';return $name;}// 输出echo $sitenName.'<br>';//正常输出echo $name,'<hr>';//报错,因为因为变量的作用域是函数作用域,只能在函数内部访问,不能够直接访问函数外部变量//通过调用函数方式来进行访问echo getInfo();echo '<hr>';// 在函数作用域中访问全部变量,有2种方式// 1.使用global关键字,表示调用全局变量function keyword(){global $sitenName;//表示调用此变量为全局变量;return $sitenName;}//输出echo keyword();echo '<hr>';// 2.使用超全局变量进行访问// 超全局变量在每个脚本中都有定义function all(){return $GLOBALS['sitenName'];//在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可)}echo all();echo '<hr>';// 在全局中创建的变量,会自动成为超全局数组$GLOBALS中的一个元素// 查看每个脚本中预定义的超全局变量echo '<pre>'.print_r($GLOBALS,true).'</pre>';
浏览器演示:
注:超全局变量不受作用域限制,可在函数中直接显示
| 序号 | 代码 | 注释 |
|---|---|---|
| 1 | $GLOBALS | $GLOBALS 这种全局变量用于在 PHP 脚本中的任意位置访问全局变量(从函数或方法中均可)。 |
| 2 | $_SERVER | 这种超全局变量保存关于报头、路径和脚本位置的信息。 |
| 3 | $_REQUEST | 用于收集 HTML 表单提交的数据。 |
| 4 | $_POST | 广泛用于收集提交 method=”post” 的 HTML 表单后的表单数据。$_POST 也常用于传递变量。 |
| 5 | $_GET | 可用于收集提交 HTML 表单 (method=”get”) 之后的表单数据。也可以收集 URL 中的发送的数据。 |
| 6 | $_FILES | 超全局变量 |
| 7 | $_ENV | 超全局变量 |
| 8 | $_COOKIE | 超全局变量 |
| 9 | $_SESSION | 超全局变量 |
常量的定义:
- 常量是单个值的标识符(名称)。在脚本中无法改变该值。
- 有效的常量名以字符或下划线开头(常量名称前面没有 $ 符号)。
- 常量必须初始化
- 一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。
- 常量在整个脚本中都可以使用,不受作用域限制,属全局变量
- 定义常量有2种方式:
使用const关键字
使用define()函数- 常量除了用户自定义以外,还有预定义常量和魔术常量
代码示例:
<?php// 自定义常量// 1.查看当前有那些常量//print_r(get_defined_constants(true));//true为参数分类// 2.查询用户自定义常量// print_r(get_defined_constants(true)['user']);// 3. 2种方式创建常量// 使用关键字const定义常量const WEATHER = 'sony';// 使用define()函数定义常量define('SMOKE','相机');echo '<pre>'.print_r((get_defined_constants(true)['user']),true).'</pre>';echo '<hr>';//类中的常量只能用const定义class Body{// define('header','head');会报错const FOOTER = 'foot';}echo Body::FOOTER,'<hr>';// 有时会用到constant('常量名')的方式来输出常量echo constant('SMOKE'),'<hr>';// 定义一个特殊常量// 这个案例可以看出使用常量名的方式不一定能获取到常量值define('','pink');echo '','<hr>';//输出为空echo constant('');
浏览器演示:
当前有那些变量:(只是一部分,可print_r(get_defined_constants(true));//true为参数分类,自行查询)
| 序号 | 代码 | 注释 |
|---|---|---|
| 1 | PHP_VERSION |
版本号 |
| 2 | PHP_OS_FAMILY |
操作系统 |
| 3 | PHP_INT_MAX |
最大整数 |
| 4 | PHP_FLOAT_MAX |
最大浮点数 |
| 5 | DIRECTORY_SEPARATOR |
目录分隔符 |
| 序号 | 代码 | 注释 |
|---|---|---|
| 1 | __LINE__ |
文件中的当前行号 |
| 2 | __FILE__ |
文件的完整路径和文件名 |
| 3 | __DIR__ |
文件所在目录 |
| 4 | __FUNCTION__ |
当前的函数名称 |
| 5 | __CLASS__ |
当前类名称 |
| 6 | __TRAIT__ |
当前Trait名称 |
| 7 | __METHOD__ |
当前类方法名称 |
| 8 | __NAMESPACE__ |
当前命名空间名称 |
图片示例:
使用命名空间的原因:我们知道常量是全局作用域的,其实,还有函数,类,接口也是全局的,这些全局成员有一个共同点就是不能重复定义,但是在实际开发中,可能不得不需要用到同一个名字,这样就会有命名冲突的问题,而命名空间namespace,就是来解决这一问题的。
代码示例:
<?php//常量的命名空间// namespace命名空间代码段需要放在所有代码的第一行// 下面展示案例二的时候先把案例一注释// 示例一// const NAME = 'jeak';// const NAME = 'theshk'; // 这一行会报错,因为命名冲突// echo NAME;// echo '<hr>';// 示例二:使用命名空间namespace ns1{const USER = '张三';}namespace ns2{const USER = '李四';}// 访问时在全局空间里面访问namespace {echo \ns1\USER,'<br>';echo \ns2\USER;}
图片演示:
介绍:
过滤器可以处理变量(就是模板index.html中的{{param}}),把原始的变量经过处理后再展示出来,作用的对象是变量
查看当前PHP版本支持的预定义过滤器有那些:
foreach(filter_list() as $filter){echo $filter.'=>'.filter_id($filter).'<br>';}
图片示例:
代码示例:
<?php// 变量过滤器// 1. 过滤单个变量 filter_var()// $age = 30;$age = '130';$age = '50';// $age = 'abc';// filter_var(要过滤的变量, 过滤器常量)$options = ['options'=>['min_range'=> 18, 'max_range'=> 60]];//设置范围限定var_dump(filter_var($age, FILTER_VALIDATE_INT, $options));echo '<hr>';$email = 'admin@php.cn';var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));echo '<hr>';var_dump(filter_var($email, 274));、//采用过滤器id效果相同
图片示例:
代码示例:
<?php// 变量过滤器// 2. 验证多个变量 filter_var_array()$a = 10;$b = '90';$arr = [$a, $b];var_dump(filter_var_array($arr, FILTER_VALIDATE_INT));echo '<hr>';
图片示例:
代码示例:
<?php// 变量过滤器//3. 外部变量//通常通过 http请求发送过来的,表单,get,post//使用GET参数来演示外部变量的获取与验证/过滤//filter_input(输入类型get/post, 变量名, 过滤器, 参数)echo 'id = ' .$_GET['id'];$options = ['options'=>['min_range'=> 1]];var_dump(filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT, $options));echo '<hr>';// 同时验证多个外部变量$args = ['username'=> FILTER_SANITIZE_STRING,'email'=>FILTER_VALIDATE_EMAIL,'age'=> ['filter'=>FILTER_VALIDATE_INT, 'options'=>['min_range'=> 18, 'max_range'=> 60]],'blog'=> FILTER_VALIDATE_URL];var_dump(filter_input_array(INPUT_GET, $args));
图片示例:
1.PHP 过滤器用于对来自非安全来源的外部数据(比如用户输入)进行验证和过滤。
外部数据来源:
| 序号 | 数据来源 | 描述 |
|---|---|---|
| 1 | 表单 | 来自表音的用户输入数据 |
| 2 | Cookies | 来自浏览器中的 cookie |
| 3 | 服务器变量 | 防止伪装的合法访问 |
| 4 | Web 服务数据 | Web 请求的数据 |
| 5 | 数据库查询结果 | 数据表中的数据并不可信 |
2.常用的过滤器函数
| 序号 | 函数 | 描述 |
|---|---|---|
| 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() |
过滤多个外部变量 |
INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV3.验证过滤器常量
| 序号 | 过滤器函数 | 描述 |
|---|---|---|
| 1 | FILTER_VALIDATE_INT |
验证整数 |
| 2 | FILTER_VALIDATE_FLOAT |
浮点点验证 |
| 3 | FILTER_VALIDATE_BOOLEAN |
验证布尔项 |
| 4 | FILTER_VALIDATE_EMAIL |
验证邮箱 |
| 5 | FILTER_VALIDATE_URL |
验证 URL 地址 |
| 6 | FILTER_VALIDATE_IP |
验证 IP 地址 |
| 7 | FILTER_VALIDATE_REGEXP |
正则验证 |
FILTER_VALIDATE_BOOLEAN: 布尔选项的返回值类型| 序号 | 返回值 | 描述 |
|---|---|---|
| 1 | true |
“1”, “true”, “on” 和 “yes” |
| 2 | false |
“0”, “false”, “off”, “no”, “” |
| 3 | null |
除以上情形外 |
4.清理过滤器常量
| 序号 | 过滤器函数 | 描述 |
|---|---|---|
| 1 | FILTER_UNSAFE_RAW |
保持原始数据 |
| 2 | FILTER CALLBACK |
自定义函数过滤数据 |
| 3 | FILTER_SANITIZE_STRING |
去除标签以及特殊字符:strip_tags() |
| 4 | FILTER_SANITIZE_STRIPPED |
“string” 过滤器别名 |
| 5 | FILTER_SANITIZE_ENCODED |
URL-encode 字符串,去除或编码特殊字符 |
| 6 | FILTER_SANITIZE_SPECIAL_CHARS |
HTML 转义字符, 等价于 htmlspecialchars() |
| 7 | FILTER_SANITIZE_EMAIL |
仅保留邮箱地址的合法字符 |
| 8 | FILTER_SANITIZE_URL |
仅保留合法的 URL, 必须从协议开始http/https |
| 9 | FILTER_SANITIZE_NUMBER_INT |
仅保留合法的数字和正负号+- |
| 10 | FILTER_SANITIZE_NUMBER_FLOAT |
仅保留合法的数字和正负号+- 以及指数 .,eE |
| 11 | FILTER_SANITIZE_MAGIC_QUOTES |
等价于函数: addslashes() |
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号