博客列表 >PHP变量,常量,作用域,命名空间,及过滤器知识点

PHP变量,常量,作用域,命名空间,及过滤器知识点

ZJ
ZJ原创
2020年07月04日 15:16:06689浏览

跟着老师学习了一些基础的PHP知识,给大家分享一下

1.变量

首先是变量,变量是什么呢,简单来说就是保存数据一个容器,例如你的钱包,你的钱包可以放钱,放信用卡,放宾馆塞进门下的小卡片,放你前女友的照片

钱包就是你定义的变量,而你塞进钱包里的东西,就是变量的值,你的值可以随时更改,例如你买东西花出去一百,然后一低头又捡到一千块,你把捡到的一千块放进钱包,这时钱包里边的值就进行了更改

变量怎么定义呢?有两种方式

  1. 第一种方式,使用$关键字直接声明
    1. $name = 'jack';
  2. 第二种方式,使用变量进行声明
    1. $$name = 'liu';
    2. echo $jack; // 输出: liu
    3. echo $$name; // 输出: liu

2.常量

常量是什么呢,常量跟变量差不多,不过常量的不可变的变量,例如我是菜鸡(暴风哭泣 T_T),例如你是个女(男)生,你的性别一般是不可变的
怎么定义呢?这个也有两种方式

  1. 使用const 关键字
    1. const USER_NAME = "jack";
  2. define函数
    1. define('USER_AGE',24)

3.作用域

作用域是什么呢,顾名思义,就是起作用的区域,那具体是谁起作用的区域呢,就是咱们定义的变量和常量,作用域有两种

  1. 全局作用域,又叫函数外作用域
    1. // 可以直接输出在上边定义的变量
    2. echo $name;
  2. 局部作用域,又叫函数内作用域
    1. function getName(){
    2. // 函数内部无法直接访问全局变量,要访问全局变量有两种方式
    3. // echo $name;
    4. // 第一种方式: GLOBAL 关键字引入
    5. GLOBAL $name;
    6. echo '我是GLOBAL关键字引入的变量:'.$name.'<hr/>';
    7. // 第二种方式: 使用$GLOBALS对象
    8. echo '我是使用$GLOBAL全局对象引入的变量:'.$GLOBALS['name'].'<hr/>';
    9. // 函数内部可直接使用常量
    10. echo '我是在函数作用域内访问的常量:'.USER_NAME.','.USER_AGE.'<hr/>';
    11. };

4.命名空间

命名空间,顾名思义,就是用来限定常量命名的一个非开放空间,在不用命名空间里可以定义相同命名的变量而不会产生错误,命名空间之外除了其余命名空间外,不能再有其他代码

  1. namespace space1 {
  2. const USER_NAME = 'space1-jack';
  3. $userName = 'jackliu';
  4. echo '</br>';
  5. };
  6. namespace space2 {
  7. const USER_NAME = 'space2-jack';
  8. echo '在space2中引用上层space1中的常量USER_NAME:'.\space1\USER_NAME.'<hr/>';
  9. // 访问变量会报错
  10. // echo '在space2中引用上层space1中的变量:'.\space1\$userName.'<hr/>';
  11. }
  12. // 匿名空间,可读取在之前引入或定义的任何命名空间里的常量
  13. namespace {
  14. echo '在space中引用上层space1中的常量USER_NAME:'.\space1\USER_NAME.'<hr/>';
  15. echo '在space中引用上层space2中的常量USER_NAME:'.\space2\USER_NAME.'<hr/>';
  16. }

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()

东西太多了,就挑几个简单的来写吧 - -

  1. filter_var 过滤单个变量
    1. $id = 111;
    2. // 验证是否为整数
    3. if(filter_var($id,FILTER_VALIDATE_INT)){
    4. echo "id验证通过====</br>";
    5. }else{
    6. echo "id验证未通过</br>";
    7. }
    8. // 结果为:id验证通过====
    9. $email = 'jack@liu.cn';
    10. // 类型:邮箱
    11. if(filter_var($email,FILTER_VALIDATE_EMAIL)){
    12. echo "邮箱验证通过====</br>";
    13. }else{
    14. echo "邮箱验证未通过</br>";
    15. }
    16. // 结果为: 邮箱验证通过====
  2. filter_var_array(arr,attr) 过滤多个变量,接受两个参数,第一个,需要验证的数组,第二个对应的验证规则
  1. // 需要验证的数组
  2. $testArr = array(
  3. 'age' => 18 ,
  4. 'gender' => '男',
  5. 'address' => 'shanghai',
  6. 'link' => 'http://www.jack.cn'
  7. );
  8. // 对应的验证规则
  9. // 分别为 可选范围整数, 用户自定义规则 , url
  10. $filterArr = array(
  11. 'age' => array(
  12. 'filter'=> FILTER_VALIDATE_INT,
  13. 'options'=>array(
  14. 'min_range'=>9,
  15. 'max_range'=>99
  16. )
  17. ),
  18. 'gender'=>array(
  19. 'filter'=> FILTER_CALLBACK,
  20. 'options'=>"judgingGender"
  21. ),
  22. 'address'=> FILTER_SANITIZE_STRING,
  23. 'link'=> FILTER_VALIDATE_URL
  24. );
  25. // 自定义规则函数
  26. function judgingGender($str){
  27. if(is_string($str) && ($str == '男' || $str == '女')){
  28. return $str;
  29. }else{
  30. return false;
  31. }
  32. }
  33. echo print_r(filter_var_array($testArr,$filterArr),true);
  34. // 结果为: Array ( [age] => 18 [gender] => 男 [address] => shanghai [link] => http://www.jack.cn )
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议