php常量、过滤器、魔术变量小结
常量
常量就是不会经常变动的量,它主要有以下几种
序号 | 名称 | 解释 | 举例 |
---|---|---|---|
1 | 预定义常量 | 系统预先定义好的常量 | PHP_VERSION |
2 | 自定义常量 | 用户使用关键字定义的常量 | difined(age) |
3 | 魔术常量 | 常量的值随代码位置改变而改变 | __DIR__ |
魔术常量案例
echo '当前行号: ' . __LINE__ . '<br>';
echo '当前文件: ' . __FILE__ . '<br>';
echo '当前目录: ' . __DIR__ . '<br>';
用户自定义常量
// define()函数,创建常量
define('LECTURE', '张三');
// const 关键字,创建常量
const COURSE = 'PHP';
在这里要讲以下这两个关键字的不同,const
主要用在类中创建常量,在其他地方是无效的,比如函数中,流程控制,在这些地方都不能用
预定义常量
// 查看系统常量
// print_r(get_defined_constants());
// 分组查看
// print_r(get_defined_constants(true));
// 打印php陪置
echo phpinfo();
// 打印php版本
echo PHP_VERSION;
// 打印PHP相关信息
echo PHP_OS_FAMILY;
变量过滤器
过滤器顾名思义就是把一些输入无效的数据给过滤掉,防止用于对服务器进行攻击,常用过滤器有以下几种
序号 | 名称 | 作用 | 语句 |
---|---|---|---|
1 | 整型过滤器 | 把不是整型的数据过滤掉 | FILTER_VALIDATE_INT,['options'=>['min_range'=>18,'max_range'=>60]] |
2 | 邮箱过滤器 | 把不是邮箱的数据过滤掉 | var_dump(filter_var($email, FILTER_VALIDATE_EMAIL)) |
3 | 过滤单个变量 | 把不是同类型的数据过滤掉 | var_dump(filter_var_array([100,'php'], FILTER_VALIDATE_INT)); |
4 | 单个外部变量过滤器 | 检测是否存在指定外部变量 | var_dump(filter_has_var(INPUT_GET, 'page')) |
5 | 多个外部变量过滤器 | 检测是否存在多个指定外部变量 | var_dump(filter_input_array(INPUT_GET,$args)) |
显示所有过滤器信息
// foreach (filter_list() as $filter) {
// echo $filter . '=>' . filter_id($filter) . '<br>';
// }
案例如下
# 变量过滤器
// foreach (filter_list() as $filter) {
// echo $filter . '=>' . filter_id($filter) . '<br>';
// }
// echo '<hr>';
// 整型过滤器
$age = 30;
$age = '14';
$age = 25;
var_dump(filter_var($age, FILTER_VALIDATE_INT,['options'=>['min_range'=>18,'max_range'=>60]]));
echo '<hr>';
// 邮箱过滤器
$email = 'admin@qq.cn';
// $email = 'admin@';
var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
// 过滤器id简写
var_dump(filter_var($email, 274));
echo '<hr>';
// 过滤单个变量filter_var_array()
var_dump(filter_var_array([100,'php'], FILTER_VALIDATE_INT));
echo '<hr>';
// 检测是否存在指定外部变量,filter_has_var()
var_dump(filter_has_var(INPUT_GET, 'page'));
echo '<hr>';
// 同时验证多个外部变量
$args = [
'username' => FILTER_SANITIZE_STRING,
'email' => FILTER_VALIDATE_EMAIL,
'age' => ['filter' => FILTER_VALIDATE_INT, 'flags'=>FILTER_REQUIRE_SCALAR, 'options' => ['min_range' => 18]],
'blog' => FILTER_VALIDATE_URL,
];
var_dump(filter_input_array(INPUT_GET,$args));
变量作用域
变量作用域,就是变量的生效范围,根据不同的作用域,也分成了两中
序号 | 作用域 | 描述 |
---|---|---|
1 | 函数作用域 | 使用funcion 创建的作用域 |
2 | 全局作用域 | 函数之外的变量生效范围 |
根据作用域不同,变量可分为三类:
序号 | 变量类型 | 描述 | 举例 |
---|---|---|---|
1 | 私用变量 | 函数中定义的变量 | 在function 之内的变量 |
2 | 全局变量 | 函数之外定义的变量 | 在function 之外定义的变量 |
3 | 超全局变量 | 预定义变量 | 系统自带的变量 |
- 超全局变量,也叫超全局数组,随系统加载,因此在所有脚本中均有定义,全局和函数中都可以访问
序号 | 变量名 | 描述 |
---|---|---|
1 | $GLOBALS |
引用全局作用域中可用的全部变量 |
2 | $_SERVER |
服务器和执行环境信息 |
3 | $_GET |
HTTP GET 请求:通过 URL 参数传递给当前脚本的变量的数组 |
4 | $_POST |
HTTP POST 请求: 将变量以关联数组形式传入当前脚本 |
5 | $_FILES |
HTTP 文件上传变量,保存着上传文件的全部信息 |
6 | $_COOKIE |
通过 HTTP Cookies 方式传递给当前脚本的变量的数组 |
7 | $_SESSION |
当前脚本可用 SESSION 变量的数组 |
8 | $_REQUEST |
默认情况下包含了 $_GET ,$_POST 和 $_COOKIE 的数组 |
9 | $_ENV |
通过环境方式传递给当前脚本的变量的数组 |
代码
namespace na1;
function test1(): float
{
$sum = 0;
$sum = $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 = $sum + 1;
return $sum;
}
echo test1(), '<br>';
echo test1(), '<br>';
echo test1(), '<br>';
echo '<hr>';
namespace ns3;
function test1(): float
{
static $sum = 0;
$sum = $sum + 1;
return $sum;
}
echo test1(), '<br>';
echo test1(), '<br>';
echo test1(), '<br>';
echo '<hr>';
效果图
通过代码的演示,我们可以看到,不同的类型,产生的结果也不同
序号 | 名称 | 作用 |
---|---|---|
1 | 函数变量 | 每次执行完都会丢失 |
2 | 全局变量 | 函数执行完会保存 |
3 | 静态变量 | 函数执行完会保存 |
总结
php中有四种变量:常量,变量,静态变量,全局变量,不同的变量,它的作用范围也不一样,所产生的效果也不一样。过滤器就相当于一个滤网,它能将用户输入的数据筛选,从而输入我们想要的数据,用起来非常的好,不像以前都是if来判断。几种类型,说简单也不简单,其中,一些细节部分,比如difine
和const
的不同,全局变量的使用,空类型的使用,这些都要注意。