批改状态:合格
老师批语:实战打印结果图?
error_reporting(E_ALL);// 1.全局作用域: 写到了函数的外部的变量$siteName = 'php中文网';// 2. 函数作用域:function getInfo(){// 访问函数外部的变量(全局变量)// 在php,函数会创建出一个独立的作用域,不能直接访问外部的变量。例如下面如果直接发挥$siteName就不行。// 私有变量$local = 'hello php.cn';// return $local;}echo getInfo();
超全局变量,在每个脚本中都有预定义,例如$GLOBALS。若有变量都是超全局变量$GLOBALS这个数组array中的一个item。
// 超全局变量,在每个脚本中都有预定义echo '<pre>'.print_r($GLOBALS,true).'</pre>';// 通过上面的方式可以让现实出来的数组更具有结构性// 在全局中创建的变量,会自动成为超全局数组$GLOBALS中的一个元素echo $GLOBALS['siteName'];// 超全局变量, 不受作用域限制,可以在函数中直接访问。
const SITE_NAME = 'php中文网2';function getInfo(){// 1. 在函数中做一个声明global $siteName;return $siteName;// 2. 通过超全局变量$GLOBALS来访问return $GLOBALS['siteName'];// 3. 通过常量来实现return SITE_NAME;}echo getInfo();
echo $_SERVER['REQUEST_URL'];echo $_SERVER['SCRIPT_FILENAME'];
print_r(get_defined_constants(true));
print_r(get_defined_constants(true)['user']);
//关键字: constconst APP_PATH = '/phpstudy_pro';// 函数definedefine('APP_NAME', '客户管理系统');//类常量只允许用constclass User{const NATION = 'CHINA';}
const SEX = 'famale';
echo APP_NAME;echo '<hr>';echo constant('APP_PATH');echo '<hr>';$name = 'APP_NAME';echo constant($name);echo '<hr>';//两种还是有一些区别的:例如“空”作为常量名称是//constant方式可以调取。但直接的那种方式无法调取。// 定义一个特殊常量// define('EMAIL', 'admin@php.cn');define('', 'admin@php.cn');// echo '';echo constant('');
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>';
| 序号 | 魔术常量 | 描述 |
|---|---|---|
| 1 | __LINE__ |
文件中的当前行号 |
| 2 | __FILE__ |
文件的完整路径和文件名 |
| 3 | __DIR__ |
文件所在目录 |
| 4 | __FUNCTION__ |
当前的函数名称 |
| 5 | __CLASS__ |
当前类名称 |
| 6 | __TRAIT__ |
当前Trait名称 |
| 7 | __METHOD__ |
当前类方法名称 |
| 8 | __NAMESPACE__ |
当前命名空间名称 |
// error_reporting(E_ALL); 这个会和命名空间冲突。命名空间也需要放到第一行。// 全局空间中的成员, 不允许重复定义// const APP_PATH = '/phpstudy_pro';// const APP_PATH = '/public';//其实类与函数也是全局成员, 也不允许重复定义namespace ns1 {const APP_PATH = '/phpstudy_pro';}namespace ns2 {const APP_PATH = '/public';echo \ns1\APP_PATH, "<br>";}
// 全局空间: 匿名空间namespace {echo \ns1\APP_PATH, "<br>";echo \ns2\APP_PATH, "<br>";}
foreach (filter_list() as $filter) {echo $filter . ' => ' .filter_id($filter) . '<br>';}
结果如下:
filter_var(要过滤的变量, 过滤器常量)
$age = '130'; // 改成这个试试$age = 'abc';$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));var_dump(filter_var($email, 274));//如果能找到代码,直接用代码进行验证也行。

$a = 10;$b = '90';$arr = [$a, $b]; //变成一个数组。var_dump(filter_var_array($arr, FILTER_VALIDATE_INT));echo '<hr>';
echo 'id = ' .$_GET['id'];$options = ['options'=>['min_range'=> 1]];var_dump(filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT, $options));// 同时验证多个外部变量$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 | 表单 | 来自表音的用户输入数据 |
| 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() |
过滤多个外部变量 |
INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV| 序号 | 过滤器函数 | 描述 |
|---|---|---|
| 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'=>...(复数)
$aUserName = 'ZhangSan';const AUSERNAME = 'LiSi';function showName(){return $GLOBALS['aUserName'];}echo showName();
define ('AUSERNAME', 'LiSi');echo constant ('AUSERNAME');
//① 查询所有的过滤器foreach (filter_list() as $filter) {echo $filter . ' => ' .filter_id($filter) . '<br>';}echo '<hr>';//② int范围验证$income = '1000000000';$options = ['options'=>['min_range'=> 10000, 'max_range'=> 99999999]];echo '第一个验证结果:';var_dump(filter_var($income, FILTER_VALIDATE_INT, $options));echo '<hr>';//③ email格式验证$email = 'abc@abc.com';echo '第二个验证结果:';var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));echo '<hr>';//④ ip地址验证$ip = '126.1.0';echo '第三个验证结果:';var_dump(filter_var($ip, FILTER_VALIDATE_IP));echo '<hr>';//⑤ 仅保留合法的数字和正负号+-$rawdata = 'rt576';echo '第四个验证结果:';var_dump(filter_var($rawdata, FILTER_SANITIZE_NUMBER_INT));echo '<hr>';//⑥ 验证多个外部变量$loginInfo = ['username'=> FILTER_SANITIZE_STRING,'email'=>FILTER_VALIDATE_EMAIL,'age'=> ['filter'=>FILTER_VALIDATE_INT, 'options'=>['min_range'=> 18, 'max_range'=> 60]],'website'=> FILTER_VALIDATE_URL];echo '第五个验证结果:';var_dump(filter_input_array(INPUT_GET, $args));echo '<hr>';
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号