1.变量作用域
作用域是变量的生效范围
作用域是查找变量的工具
全局作用域:写到函数外部的变量。
超全局变量在每个脚本中都有预定义。
在全局中创建的变量,会自动成为超全局数组$GLOBALS中的一个元素。
超全局变量不受作用域限制,可在函数中直接访问。
函数作用域:
在PHP,函数会创建出一个独立的作用域,不能直接访问外部的变量。
在函数外部是全局变量。
函数内部是私有变量可直接访问。
<?php
$siteName = '淘宝网';
// 超全局变量
// echo '<pre>'.print_r($GLOBALS,true).'</pre>';
// echo $GLOBALS['siteName'];
function getInfo()
{
// return $siteName;
// 在函数做一个声明
// global $siteName;
// return $siteName;
// 私有变量
// $local = 'taobao.com';
// return $local;
return $GLOBALS['siteName'];
}
echo getInfo();
echo '<hr>';
echo $_SERVER['SCRIPT_NAME'];
echo '<hr>';
echo $_SERVER['SCRIPT_FILENAME'];
2.php常量
二种方式创建:关键字const、函数define
类常量只允许用const。
常量前没有$
常量必须初始化
常量不允许删除
常量不受作用域限制
常量推荐全部大写,多个单词之间用下划线连接。
// print_r(get_defined_constants(true));
const APP_PATH ='/phpstudy_pro';
define('APP_NAME','淘宝宝');
// 查询用户自定义常量
print_r(get_defined_constants(true)['user']);
class user
{
const NATION = 'china';
// define('D',200);
}
// 常量初始化
$age;
const SEX = 'BOY';
// 常量不允许删除
// unset(SEX);
// print_r(get_defined_constants(true)['user']);
echo APP_NAME;
echo '<hr>';
echo constant('APP_PATH');
echo '<hr>';
$name = 'APP_NAME';
echo constant($name);
预定义常量:
echo '版本号: ' . PHP_VERSION . '<br>';
echo '操作系统: ' . PHP_OS_FAMILY . '<br>';
echo '最大整数: ' . PHP_INT_MAX . '<br>';
echo '最大浮点数: ' . PHP_FLOAT_MAX . '<br>';
echo '目录分隔符: ' . DIRECTORY_SEPARATOR . '<hr>';
魔术常量:
序号 | 魔术常量 | 描述 |
---|---|---|
1 | __LINE__ |
文件中的当前行号 |
2 | __FILE__ |
文件的完整路径和文件名 |
3 | __DIR__ |
文件所在目录 |
4 | __FUNCTION__ |
当前的函数名称 |
5 | __CLASS__ |
当前类名称 |
6 | __TRAIT__ |
当前Trait 名称 |
7 | __METHOD__ |
当前类方法名称 |
8 | __NAMESPACE__ |
当前命名空间名称 |
echo __FILE__.'<br>';
echo __DIR__.'<br>';
echo __LINE__.'<br>';
命名空间:
全局空间中的成员, 不允许重复定义。
与函数也是全局成员, 也不允许重复定义。
全局成员: 常量, 类, 函数, 接口
命名空间: 解决了全局成员 的命名冲突问题。
namespace class1{
const APP_NAME ='京东';
}
namespace class2{
const APP_NAME ='淘宝';
// echo \class1\APP_NAME;
}
namespace{
echo \class1\APP_NAME,'<br>';
echo \class2\APP_NAME,'<br>';
}
3.变量过滤器
PHP 过滤器用于验证和过滤来自非安全来源的外部数据。
foreach()查看当前php版本支持的预定义过滤器
常用的过滤器函数:
序号 | 函数 | 描述 |
---|---|---|
1 | filter_list() |
函数返回包含所有得到支持的过滤器 |
2 | filter_id() |
|
3 | filter_var() |
过滤单个变量 |
4 | filter_var_array() |
过滤多个变量 |
5 | filter_has_var() |
检测是否存在某个外部变量 |
6 | filter_input() |
过滤单个外部变量 |
7 | filter_input_array() |
过滤多个外部变量 |
filter_list()实例:
foreach(filter_list()as $filter){
echo $filter . '=>'.filter_id($filter).'<br>';
}
filter_var()实例:
$age =36;
var_dump(filter_var($age,FILTER_VALIDATE_INT))
filter_var_array()实例:
$a = 200;
$B ='230';
var_dump(filter_var_array([$a,$B],FILTER_VALIDATE_INT));
filter_input(输入类型get/post, 变量名, 过滤器, 参数)实例:
echo 'id ='.$_GET['id'],'<br>';
$options = ['options'=>['min_range'=> 1]];
var_dump(filter_input(INPUT_GET,'id',FILTER_VALIDATE_INT,$options));
filter_input_array()实例:
$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));
外部变量类型: INPUT_GET
, INPUT_POST
, INPUT_COOKIE
, INPUT_SERVER
, INPUT_ENV
过滤器主要分为二类: 验证过滤器, 清理过滤器
使用GET参数来演示外部变量的获取与验证/过滤
验证过滤器常量:
序号 | 过滤器函数 | 描述 |
---|---|---|
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 |
正则验证 |
外部数据来源:
序号 | 数据来源 | 描述 |
---|---|---|
1 | 表单 | 来自表音的用户输入数据 |
2 | Cookies | 来自浏览器中的 cookie |
3 | 服务器变量 | 防止伪装的合法访问 |
4 | Web 服务数据 | Web 请求的数据 |
5 | 数据库查询结果 | 数据表中的数据并不可信 |
布尔选项的返回值类型:
序号 | 返回值 | 描述 |
---|---|---|
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'=>...
(复数)
4.总结
- 掌握全局作用域和函数作用域。在函数外部是全局变量。函数内部是私有变量
- 常量二种方式创建:关键字const、函数define,推荐全部大写,多个单词之间用下划线连接,理解魔术常量。
- 命名空间: 解决了全局成员 的命名冲突问题。
- 掌握变量过滤器,利用常用函数过滤器过滤单个或者多个变量,然后清理过滤器和验证过滤器。