变量
1. 作用域变量作用域,也叫”变量范围”, 即定义变量时的上下文环境
变量作用域,通俗的说,就是变量的生效范围
一个变量必定属于一个作用域, 这个作用域也包括了当前作用域中引入其它文件
也有不受作用域限制的变量,例如超全局变量, 在程序中任何地方都是有定义的
函数作用域: php 中只有函数可以创建作用域, 函数之外的代码全部在全局空间中
序号
作用域
描述
1
函数作用域
使用function关键字创建的作用域
2
全局作用域
函数之外的变量生效范围
php 中没有块作用域的概念, 这与其它编程语言不同, 请留意
根据作用域不同, 变量可以分为三类:
序号
变量类型
描述
1
私有变量
函数中定义的变量
2
全局变量
函数之外定义的变量
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
通过环境方式传递给当前脚本的变量的数组
//变量作用域
//全局作用域
$sitename='PHP中文网';
functiongetInfo():string
{
//在函数中无法访问全局变量 需要global引用全局变量或者使用超全局变量$GLOBALS
// global $sitename;
// $private = $sitename;
// 超全局变量不需要定义不需要初始化 在脚本中直接使用
$private=$GLOBALS['sitename'];
return$private;
}
echo getInfo();
2静态变量
static + 变量
定义在函数中的静态变量使用static修饰,并且与函数作用域绑定
静态变量定义时必须初始化,且只能初始化一次,默认为0
当程序执行离开函数作用域后,静态变量的值不丢失
静态变量的值,可以在函数的多次调用中保持不变,即可带入下次调用中
函数中静态变量遵循私有变量约束, 全局不可访问<?php
functiontest1():string
{
//静态变量只在第一次调用的时候被初始化,以后不会被更新
//实现函数在多次调用的时候的数据共享
static$sum=0;
$sum=$sum+1;
return$sum;
}
echo test1(),'
';
echo test1(),'
';
echo test1(),'
';
运行结果是1 ,2 ,3
3变量过滤器
3.1过滤单个变量使用filter_var
//遍历所有过滤器
foreach(filter_list()as$filter){
echo $filter.'==>'.filter_id($filter).'
';
}
//1.过滤单个变量
//int过滤器
$age=-1;
var_dump(filter_var($age,FILTER_VALIDATE_INT,['options'=>['min_range'=>18,'max_range'=>60]]));
echo'
';
//url过滤器正确的url要从http://开始
$blog='baidu.com';
var_dump(filter_var($blog,FILTER_VALIDATE_URL));
echo'
';
//邮箱过滤器
var_dump(filter_var($email,FILTER_VALIDATE_EMAIL));
3.2过滤多个变量使用filter_var_array//1.过滤多个变量
$arr=array(
'abc',
200
);
var_dump(filter_var_array($arr,FILTER_VALIDATE_EMAIL));
3.3检测是否存在外部变量使用函数filter_has_var()
//检测外部变量是否存在使用函数filter_has_var()
//URL地址?后面的键值对
//INPUT_GET表示要检测的是$_GET
var_dump(filter_has_var(INPUT_GET,'p'));
3.4访问外部变量的过滤器filter_input
主要是为了验证数据
filter_input(INPUT_GET,'p',FILTER_VALIDATE_INT,['options'=>['min_range'=>1]]));
3.5同时验证多个外部变量的过滤器filter_input_array()
变量是个数组
$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));
4常量
常量
1. 特征序号
特征
1
常量前面没有美元符号$
2
常量创建时必须初始化
3
常量禁止更新和删除
4
常量不受作用域限制
5
推荐使用大写字母加下划线命名
2. 函数/关键字序号
定义方式
描述
1
get_defined_constants()
查看系统所有常量
2
defined()
检测常量是否存在
3
define()
创建常量
4
const 关键字
创建常量
5
constant()
获取常量值
get_defined_constants(true): 常量分组打印,自定义常量在user分组
defined(): 返回布尔值
-constant():当不知道常量时查找
```php
//定义常量
//1.define()函数,不能用在类里面
define(‘LECTURE’,’朱老师’);
//const关键字不能再函数中创建 流程控制中可不能使用
const COURSE =’php’;
//常量不受作用域的限制
function test1()
{
echo LECTURE . COURSE;
}
//const用在类中,创建类常量
class Demo
{
const HELLO = ‘php’;
}
echo Demo::HELLO;
//常量通常只允许用标量进行初始化
//php7.0++支持数组初始化常量
const DB_LINK =[
‘host’ => ‘localhost’,
‘username’ =>’root’,
‘password’ =>’root’,
‘charset’ =>’utf8’,
];
echo ‘
‘.print_r(DB_LINK,true).’‘;
```
3. 预定义常量
预定义常量非常多,有许多与具体扩展相关,如 PDO, 这里仅列出系统级常用的:
序号
预定义常量
描述
1
PHP_VERSION
PHP 版本
2
PHP_MAXPATHLEN
PHP 路径最大长度:1024
3
PHP_OS_FAMILY
操作系统:Windows/Darwin/Linux
4
PHP_SAPI
web 服务器与 php 之间接口: apache2handler
5
PHP_EOL
行尾结束符
6
PHP_INT_MAX
最大整数: 9223372036854775807
7
PHP_INT_MIN
最小整数: -9223372036854775808
8
PHP_INT_SIZE
整数宽度: 8
9
PHP_FLOAT_MAX
最大浮点数:1.7976931348623E+308
10
PHP_FLOAT_MIN
整小浮点数: 2.2250738585072E-308
11
DEFAULT_INCLUDE_PATH
默认 PHP 命令路径
12
PHP_EXTENSION_DIR
默认 PHP 扩展路径
13
E_ERROR
运行时错误: 致命中断
14
E_PARSE
语法解析错误: 致命中断
15
E_NOTICE
运行时提示: 不中断
16
E_WARNING
运行时警告: 不中断
17
E_ALL
所有级别错误(除E_STRICT)
18
E_STRICT
更加严格的错误处理机制,高于E_ALL
19
TRUE
布尔真
20
FALSE
布尔假
21
NULL
空
22
DIRECTORY_SEPARATOR
目录分隔符
4. 魔术常量魔术常量也属于”预定义常量”, 比较特殊所有单独列出
所谓”魔术”, 是指常量的值, 会随它们在代码中的位置改变而改变
魔术常量不区分大小写, 但是推荐全部大写
序号
魔术常量
描述
1
__LINE__
文件中的当前行号
2
__FILE__
文件的完整路径和文件名
3
__DIR__
文件所在目录
4
__FUNCTION__
当前的函数名称
5
__CLASS__
当前类名称
6
__TRAIT__
当前Trait名称
7
__METHOD__
当前类方法名称
8
__NAMESPACE__
当前命名空间名称
总结
1.php中有常量,变量,静态变量,全局变量。变量,常量的作用域也不同
2.过滤器能将用户输入的数据筛选,从而输入我们想要的数据。
3.常量的创建和使用以及const与define()应用的场景
4.系统预定义的一些常量,魔术常量的特点,这些都需要熟悉自己验证