变量
作用域
- 变量作用域,即变量的生效范围。
- 函数作用域:函数里面创建的作用域
- 全局作用域:函数之外的变量生效范围
- 变量类型:
- 私有变量,函数中定义,作用域在函数
- 全局变量,函数外定义的变量,不能被函数直接使用
- 超全局变量,也叫预定义变量,访问不受作用域限制
- 超全局变量,也叫超全局数组,随系统加载,因此在所有脚本中均有定义,全局和函数中都可以访问
序号 | 变量名 | 描述 |
---|---|---|
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 |
通过环境方式传递给当前脚本的变量的数组 |
<?php
//声明全局变量$a
//全局变量会自动注册为超全局变量数组$GLOBALS的一个值
$var = "hello";
(print_r($GLOBALS));
echo '<br>';
function demo(): string {
//私有变量拿不到全局变量$var的值,会报错
// $letter = $var;
//通过global获取全局变量
global $var;
$letter = $var;
return $letter;
}
function demo2(){
//通过超全局变量获取全局变量值
$private = $GLOBALS['var'];
return $private;
}
echo demo(),'<br>';
echo demo2();
静态变量
- 函数中的私有变量,每次调用函数都会重新初始化
- 用static声明的变量,叫静态变量,只会在第一次调用时候初始化一次,下一次调用拿到的变量值会保留上一次调用结束时候的结果,实现数据共享。
<?php
namespace ns1;
//定义函数,返回$i自增的值
function test1() : int {
$i = 0 ;
return $i++;
}
//每次调用函数,返回的值都是1
echo test1(),"<br>";
echo test1(),"<br>";
echo test1(),"<br>","<hr>";
namespace ns2;
//将$j定义为全局变量,实现数据共享,但不推荐进行数据改变
$j = 0 ;
//定义函数,返回$j自增的值
function test2() : int {
global $j;
return $j++;
}
//每次调用函数,返回的值都会+1
echo test2(),"<br>";
echo test2(),"<br>";
echo test2(),"<br>","<hr>";
namespace ns3;
//定义函数,返回$k自增的值
function test3() : int {
//用static关键字,将$k声明为静态变量
static $k = 0 ;
return $k++;
}
//每次调用函数,返回的值都会+1
echo test3(),"<br>";
echo test3(),"<br>";
echo test3(),"<br>";
变量过滤器
获取过滤器
int => 257
boolean => 258
float => 259
validate_regexp => 272
validate_domain => 277
validate_url => 273
validate_email => 274
validate_ip => 275
validate_mac => 276
string => 513
stripped => 513
encoded => 514
special_chars => 515
full_special_chars => 522
unsafe_raw => 516
email => 517
url => 518
number_int => 519
number_float => 520
magic_quotes => 521
add_slashes => 523
callback => 1024
foreach (filter_list() as $filter) {
echo $filter . ' => ' . filter_id($filter) . '<br>';
}
echo '<hr>';
过滤器用法举例
- 过滤单个变量,filter_var()
- 过滤单个变量,filter_var_array()
- 检测是否存在指定的外部变量,filter_has_var()
- 访问外部变量的过滤器,filter_input
- 同时验证多个外部变量,filter_input_array()
<?php
// INPUT_GET: 表示要检测的是$_GET,就是get参数
// INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV
// 访问外部变量的过滤器,filter_input
//校验get参数是否有page,并且页码是否大于等于1
var_dump(filter_input(INPUT_GET, 'page',FILTER_VALIDATE_INT, ['options'=>['min_range'=>1]]));
// 同时验证多个外部变量: filter_input_array()
echo '<hr>';
//校验name是否存在且为字符串
//校验邮箱是否存在切格式正确
$args = [
'username' => FILTER_SANITIZE_STRING,
'email' => FILTER_VALIDATE_EMAIL,
];
var_dump(filter_input_array(INPUT_GET, $args));
常量
常量声明:
//define()函数
define("常量名" ,常量值);
// const 关键字
const COURSE = 'PHP';
常量名是一个字符串,通常使用大写英文表示,例如 CLASS_NAME , MYAGE等。
- 常量可在函数内外进行访问
- 常量只能存储布尔值,整型数据,浮点型数据和字符串数据,不能被改动。
- 内置常量:常见列举
__FILE__
:文件完整路径和文件名
__LINE__
:PHP代码行数
PHP_VERSION
:PHP版本
PHP_OS
:执行php解析的操作系统
TRUE
:真值
FALSE
:伪值
E_ERROR
:指到最近的代码错误
E_WARNING
:最近的代码警告
E_PARSE
:语法问题
E_NOTICE
:异常提醒
__DIR__
:文件所在目录
__FUNCTION__
:函数被定义时的名字,区分大小写
__CLASS__
:类被定义时的名字,区分大小写
<?php
define ("COUNTRE","China");
const PROVINCE = "广州";
echo COUNTRE;
echo '<br>';
echo constant("PROVINCE");
echo '<br>';
echo (__FILE__),'<br>';
echo (__LINE__),'<br>';
echo (PHP_VERSION),'<br>';
echo (PHP_OS),'<br>';
//定义类
class FirstClass{
//定义类函数
function test(){
echo (__FUNCTION__);
echo '<br>';
echo (__CLASS__);
}
}
//创建类匿名对象调用类函数
(new FirstClass)->test();
总结
- 变量根据定义位置,具有不同的作用域,除了超全局变量可以无视作用域,全局变量和局部变量都要留意。可以通过 global或者$GLOBALS(),在函数中使用全局变量。
- 理解静态变量,修饰符static,随着方法多次调用,变量值会受到上一次调用的影响。
- 常量的2种定义方式,以及记住一些常用系统常量。