跟着老师学习了一些基础的PHP知识,给大家分享一下
1.变量
首先是变量,变量是什么呢,简单来说就是保存数据一个容器,例如你的钱包,你的钱包可以放钱,放信用卡,放宾馆塞进门下的小卡片,放你前女友的照片
钱包就是你定义的变量,而你塞进钱包里的东西,就是变量的值,你的值可以随时更改,例如你买东西花出去一百,然后一低头又捡到一千块,你把捡到的一千块放进钱包,这时钱包里边的值就进行了更改
变量怎么定义呢?有两种方式
- 第一种方式,使用$关键字直接声明
$name = 'jack';
- 第二种方式,使用变量进行声明
$$name = 'liu';
echo $jack; // 输出: liu
echo $$name; // 输出: liu
2.常量
常量是什么呢,常量跟变量差不多,不过常量的不可变的变量,例如我是菜鸡(暴风哭泣 T_T),例如你是个女(男)生,你的性别一般是不可变的
怎么定义呢?这个也有两种方式
- 使用const 关键字
const USER_NAME = "jack";
- define函数
define('USER_AGE',24)
3.作用域
作用域是什么呢,顾名思义,就是起作用的区域,那具体是谁起作用的区域呢,就是咱们定义的变量和常量,作用域有两种
- 全局作用域,又叫函数外作用域
// 可以直接输出在上边定义的变量
echo $name;
- 局部作用域,又叫函数内作用域
function getName(){
// 函数内部无法直接访问全局变量,要访问全局变量有两种方式
// echo $name;
// 第一种方式: GLOBAL 关键字引入
GLOBAL $name;
echo '我是GLOBAL关键字引入的变量:'.$name.'<hr/>';
// 第二种方式: 使用$GLOBALS对象
echo '我是使用$GLOBAL全局对象引入的变量:'.$GLOBALS['name'].'<hr/>';
// 函数内部可直接使用常量
echo '我是在函数作用域内访问的常量:'.USER_NAME.','.USER_AGE.'<hr/>';
};
4.命名空间
命名空间,顾名思义,就是用来限定常量命名的一个非开放空间,在不用命名空间里可以定义相同命名的变量而不会产生错误,命名空间之外除了其余命名空间外,不能再有其他代码
namespace space1 {
const USER_NAME = 'space1-jack';
$userName = 'jackliu';
echo '</br>';
};
namespace space2 {
const USER_NAME = 'space2-jack';
echo '在space2中引用上层space1中的常量USER_NAME:'.\space1\USER_NAME.'<hr/>';
// 访问变量会报错
// echo '在space2中引用上层space1中的变量:'.\space1\$userName.'<hr/>';
}
// 匿名空间,可读取在之前引入或定义的任何命名空间里的常量
namespace {
echo '在space中引用上层space1中的常量USER_NAME:'.\space1\USER_NAME.'<hr/>';
echo '在space中引用上层space2中的常量USER_NAME:'.\space2\USER_NAME.'<hr/>';
}
5.过滤器
过滤器一般用在外部变量的验证,例如表单,cookie,数据库返回数据,
过滤器用于对来自非安全来源的数据(比如用户输入)进行验证和过滤。
过滤器函数有以下几个
函数 | 描述 |
---|---|
filter_has_var() | 检查是否存在指定输入类型的变量。 |
filter_id() | 返回指定过滤器的 ID 号。 |
filter_input() | 从脚本外部获取输入,并进行过滤。 |
filter_input_array() | 从脚本外部获取多项输入,并进行过滤。 |
filter_list() | 返回包含所有得到支持的过滤器的一个数组。 |
filter_var_array() | 获取多项变量,并进行过滤。 |
filter_var() | 获取一个变量,并进行过滤。 |
验证器常量有
- 验证过滤器: 又叫”验证器”, 主要用于数据的类型和格式验证
序号 | 过滤器函数 | 描述 |
---|---|---|
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() |
东西太多了,就挑几个简单的来写吧 - -
- filter_var 过滤单个变量
$id = 111;
// 验证是否为整数
if(filter_var($id,FILTER_VALIDATE_INT)){
echo "id验证通过====</br>";
}else{
echo "id验证未通过</br>";
}
// 结果为:id验证通过====
$email = 'jack@liu.cn';
// 类型:邮箱
if(filter_var($email,FILTER_VALIDATE_EMAIL)){
echo "邮箱验证通过====</br>";
}else{
echo "邮箱验证未通过</br>";
}
// 结果为: 邮箱验证通过====
- filter_var_array(arr,attr) 过滤多个变量,接受两个参数,第一个,需要验证的数组,第二个对应的验证规则
// 需要验证的数组
$testArr = array(
'age' => 18 ,
'gender' => '男',
'address' => 'shanghai',
'link' => 'http://www.jack.cn'
);
// 对应的验证规则
// 分别为 可选范围整数, 用户自定义规则 , url
$filterArr = array(
'age' => array(
'filter'=> FILTER_VALIDATE_INT,
'options'=>array(
'min_range'=>9,
'max_range'=>99
)
),
'gender'=>array(
'filter'=> FILTER_CALLBACK,
'options'=>"judgingGender"
),
'address'=> FILTER_SANITIZE_STRING,
'link'=> FILTER_VALIDATE_URL
);
// 自定义规则函数
function judgingGender($str){
if(is_string($str) && ($str == '男' || $str == '女')){
return $str;
}else{
return false;
}
}
echo print_r(filter_var_array($testArr,$filterArr),true);
// 结果为: Array ( [age] => 18 [gender] => 男 [address] => shanghai [link] => http://www.jack.cn )