Correcting teacher:Guanhui
Correction status:qualified
Teacher's comments:写很好!继续加油!
作用域的意义:
示例:
<?php
// 全局作用域
$name = '小刚';
// 全局变量自动成为超全局数组$GLOBALS中的元素
echo '<pre>' . print_r($GLOBALS, true) . '</pre>';
echo $GLOBALS['name'];
echo '<hr>';
// 函数作用域
function student()
{
// 私有变量
// $myname = '超人';
// return $myname;
// 在函数中不能直接访问全局变量,要用global声明或者用超全局变量$GLOBALS来访问
// 1.global声明
// global $name;
// return $name;
// 2.超全局变量$GLOBALS访问
return $GLOBALS['name'];
}
echo student();
常量前没有$,推荐全大写多个单词用“_”连接,必须要初始化,不让删除,不受作用域限制。
示例:
<?php
// 查看当前系统常量
// print_r(get_defined_constants(true));
// 自定义常量,两种方式:const、define()。
const MY_NAME = '小刚';
define('MY_AGE', 18);
// 只查看自定义常量,相当于只看系统常量数组中的一个元素
print_r(get_defined_constants(true)['user']);
// 类中的常量只允许用const定义,用define()会报错
class People
{
const NAME = '小刚';
}
echo '<br>';
// 如果常量名放在一个变量中,用constent()输出常量的值
$name = 'MY_NAME';
echo constant($name);
echo '<br>';
// null也可以用作常量名,但要用constant()获取值
define('', '男');
echo constant('');
魔术常量的值随系统变化而变化,无法自定义。
示例:
<?php
// 预定义常量:
echo '版本号: ' . PHP_VERSION . '<br>';
echo '操作系统: ' . PHP_OS_FAMILY . '<br>';
echo '最大整数: ' . PHP_INT_MAX . '<br>';
echo '最大浮点数: ' . PHP_FLOAT_MAX . '<br>';
echo '目录分隔符: ' . DIRECTORY_SEPARATOR . '<hr>';
// 魔术常量:值随系统变化而变化,无法自定义
echo '当前文件完整路径: ' . __FILE__ . '<br>';
echo '当前文件所在目录: ' . __DIR__ . '<br>';
echo '当前行号: ' . __LINE__ . '<br>';
echo '当函数名: ' . __FUNCTION__ . '<br>';
echo '当前类名: ' . __CLASS__ . '<br>';
echo '当前trait名: ' . __TRAIT__ . '<br>';
echo '当前类方法名: ' . __METHOD__ . '<br>';
echo '当前命名空间: ' . __NAMESPACE__ . '<br>'
类、函数、接口、常量都是全局成员,不允许重复定义。
解决全局成员的命名冲突问题。
示例:
<?php
// 命名空间
namespace name1 {
const MY_NAME = '超人';
}
namespace name2 {
const MY_NAME = '小刚';
}
// 全局空间,默认空间没有名称
namespace {
echo name1\MY_NAME;
echo '<br>';
echo name2\MY_NAME;
}
PHP过滤器作用:
外部数据来源有以下途径:
序号 | 数据来源 | 描述 |
---|---|---|
1 | 表单 | 来自表音的用户输入数据 |
2 | Cookies | 来自浏览器中的 cookie |
3 | 服务器变量 | 防止伪装的合法访问 |
4 | Web 服务数据 | Web 请求的数据 |
5 | 数据库查询结果 | 数据表中的数据并不可信 |
常用的过滤器函数:
序号 | 函数 | 描述 |
---|---|---|
1 | filter_list() |
|
2 | filter_id() |
|
3 | filter_var() |
过滤单个变量 |
4 | filter_var_array() |
过滤多个变量 |
5 | filter_has_var() |
检测是否存在某个外部变量 |
6 | filter_input() |
过滤单个外部变量 |
7 | filter_input_array() |
过滤多个外部变量 |
验证过滤器常量:
序号 | 过滤器函数 | 描述 |
---|---|---|
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 |
除以上情形外 |
清理过滤器常量:
序号 | 过滤器函数 | 描述 |
---|---|---|
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() |
选项与标志
'options'=>[...], 'flags'=>...
(复数)过滤器部分示例:
<?php
// 查看当前php版本支持的过滤器
// foreach (filter_list() as $filter) {
// echo $filter . ' => ' . filter_id($filter) . '<br>';
// }
// echo '<hr>';
// 1.单个变量过滤:filter_var(变量名, 过滤器常量)
// $age = 18;
// var_dump(filter_var($age, FILTER_VALIDATE_INT));
// echo '<hr>';
// 2.多个变量过滤:filter_var_array()
// $name = '小刚';
// $age = 10;
// $sex = '男';
// 将变量放到一个数组中
// $people = ['name' => '小刚', 'age' => 10, 'sex' => '男'];
// var_dump(filter_var_array($people, FILTER_VALIDATE_INT));
// echo '<br>';
// var_dump(filter_var_array($people, 513));
// echo '<hr>';
// 3.外部变量过滤:filter_input(输入类型, 变量名, 过滤器, 可选参数)
// echo '标题:' . $_GET['title'];
// 范围用'options' => ['min_range' => 22, 'max_range' => 55]表示
// $data = ['options' => ['min_range' => 2000, 'max_range' => 10000]];
// var_dump(filter_input(INPUT_GET, 'cost', FILTER_VALIDATE_INT, $data));
// echo '<hr>';
// 4.验证多个外部变量:filter_input_array()
$data = [
'name' => FILTER_SANITIZE_STRING,
'cost' => FILTER_VALIDATE_INT,
'exp' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 2, 'max_range' => 10]],
'web' => FILTER_VALIDATE_URL
];
var_dump(filter_input_array(INPUT_GET, $data));