博客列表 >PHP大牛成长之路:常量&变量作用域及过滤器

PHP大牛成长之路:常量&变量作用域及过滤器

周Sir-BLOG
周Sir-BLOG原创
2020年07月04日 01:35:52707浏览

1.常量

1.1:常量的定义

  • 使用 const 创建常量
  1. const USER_NAME='小龙女';
  2. echo USER_NAME;
  • 使用 define() 创建常量
  1. define('USER_NAME','小龙女');
  2. echo USER_NAME;

1.2:查看所有当前定义的常量

  • 可以使用 get_defined_constants() 查看所有当前定义的常量(含预定义及用户自定义)

  • get_defined_constants() 返回为数组

  1. //返回一个一维数组显示,常量+值
  2. print_r(get_defined_constants());
  3. //返回一个二维数组分类显示,一维:分类名称;二维:常量+值
  4. print_r(get_defined_constants(true));
  5. //只返回用户自定义分类常量+值
  6. print_r(get_defined_constants(true)['user']);

1.3:预定义常量

  1. // 预定义常量
  2. echo '版本号: ' . PHP_VERSION . '<br>';
  3. echo '操作系统: ' . PHP_OS_FAMILY . '<br>';
  4. echo '最大整数: ' . PHP_INT_MAX . '<br>';
  5. echo '最大浮点数: ' . PHP_FLOAT_MAX . '<br>';
  6. echo '目录分隔符: ' . DIRECTORY_SEPARATOR . '<hr>';

可以使用 get_defined_constants() 查看所有当前定义的常量

1.4:魔术常量(特殊)

序号 魔术常量 描述
1 __LINE__ 文件中的当前行号
2 __FILE__ 文件的完整路径和文件名
3 __DIR__ 文件所在目录
4 __FUNCTION__ 当前的函数名称
5 __CLASS__ 当前类名称
6 __TRAIT__ 当前Trait名称
7 __METHOD__ 当前类方法名称
8 __NAMESPACE__ 当前命名空间名称
  1. // 1、查询文件位置(不含文件名称)
  2. echo __DIR__ ;
  3. //输出:D:\phpstudy_pro\WWW
  4. //----------------------------------------------
  5. // 2、查询文件位置(含文件名称)
  6. echo __FILE__ ;
  7. //输出:D:\phpstudy_pro\WWW\index.php
  8. //----------------------------------------------
  9. class tempClass {
  10. function getClass() {
  11. return '类名为:' . __CLASS__ ;
  12. }
  13. }
  14. $viewClass = new tempClass();
  15. echo $viewClass->getClass();
  16. // 输出:类名为:tempClass

1.5:解决全局成员命名冲突

  1. // 全局成员,不允许重复定义(全局成员包含: 常量, 类(接口), 函数 )
  2. // const STUDENT_NAME = '张三';
  3. // const STUDENT_NAME = '李四';
  4. //解决方法:创建命名空间
  5. namespace class1 {
  6. const STUDENT_NAME = '张三';
  7. }
  8. namespace class2 {
  9. const STUDENT_NAME = '李四';
  10. }
  11. // 全局空间: 也叫匿名空间
  12. namespace {
  13. echo \class1\STUDENT_NAME, "<br>";
  14. //输出:张三
  15. echo \class2\STUDENT_NAME, "<br>";
  16. //输出:李四
  17. }
  18. // 命名空间: 解决了全局成员 的命名冲突问题

1.6:定义常量注意事项

  • 常量前没有$
  • 常量必须初始化(定义时赋值)
  • 常量不能删除(如 unset )
  • 常量不受作用域限制
  • 常量推荐全部大写,多个单词之间使用下划线连接
  • 类常量只允许用const(不能使用 define())

2.变量的作用域

  • 作用域是变量的生效范围
  • 作用域是查找变量的工具

2.1:全局变量(函数的外部的变量)

  • 在php,函数会创建出一个独立的作用域,不能直接访问外部变量
  1. //创建一个变量
  2. $siteName='PHP中文网';
  3. //创建一个函数
  4. function getName()
  5. {
  6. // 方法1:在函数中做一个声明
  7. // global $siteName;
  8. // return $siteName;
  9. //-------------------------------------------
  10. // 方法2. 通过超全局变量$GLOBALS访问
  11. return $GLOBALS['siteName'];
  12. }
  13. echo getName();

2.2:局部变量(私有变量,函数内部的变量)

  1. //创建一个函数
  2. function getName()
  3. {
  4. //创建一个变量
  5. $siteName='PHP中文网';
  6. return $siteName;
  7. }
  8. echo getName();

3.变量过滤器

  • PHP 过滤器用于验证和过滤来自非安全来源的数据,比如用户的输入。

3.1:查看当前php版本支持的预定义过滤器

  • 可以使用 filter_list() 函数返回包含所有得到支持的过滤器(数组)
  1. print_r(filter_list());
  • 也可以通过循环得到过滤器及 filter_id
  1. foreach (filter_list() as $filter) {
  2. echo $filter . ' => ' .filter_id($filter) . '<br>';
  3. }

3.2:过滤器函数:

No 函数 描述
1 filter_var() 通过一个指定的过滤器来过滤单一的变量
2 filter_var_array() 通过相同的或不同的过滤器来过滤多个变量
3 filter_input 获取一个输入变量,并对它进行过滤
4 filter_input_array 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤
  • 验证过滤器常量

  • 验证过滤器: 又叫”验证器”, 主要用于数据的类型和格式验证

序号 过滤器函数 描述
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 正则验证

3.2.1:filter_var() 过滤单个

  • 语法:filter_var(要过滤的变量,过滤器常量,选项)
  • 邮箱验证示例:
  1. //定义变量:邮箱地址
  2. $email = 'admin@phpcn';
  3. //定义变量:对邮箱地址进行过滤(未附加选项)
  4. $checkEmail=filter_var($email, FILTER_VALIDATE_EMAIL);
  5. //FILTER_VALIDATE_EMAIL也可以使用filter_id
  6. //判断:如果邮箱地址为:false,表示输入错误,否则输入正确
  7. if(!$checkEmail){
  8. echo '邮箱('.$email .')输入错误!';
  9. }else{
  10. echo '邮箱('.$email .')输入正确!';
  11. }
  • 年龄验证示例:
  1. //定义变量:年龄
  2. $age = 116;
  3. //选项(要求年龄在18~60岁之间)
  4. $int_options = [
  5. 'options'=>['min_range'=> 18, 'max_range'=> 60]
  6. ];
  7. //定义变量:对年龄进行过滤(整数+年龄要求)
  8. $checkAge=filter_var($age, FILTER_VALIDATE_INT,$int_options);
  9. //判断:如果年龄为整数且满足int_options要求,表示输入正确,否则输入错误
  10. if($checkAge){
  11. echo '年龄('.$age .')输入正确!';
  12. }else{
  13. echo '年龄('.$age .')输入错误!';
  14. }

3.2.2:filter_var_array() 过滤多个

  1. //定义数组变量:多个数值
  2. $number = [12,23,1.34];
  3. print_r(filter_var_array($number, FILTER_VALIDATE_INT));
  4. // 输出:Array ( [0] => 12 [1] => 23 [2] => )
  5. // 第3个非整数验证失败不输出

3.2.3:filter_input() 获取单个外部变量过滤

  • 语法:filter_input(输入类型get/post, 变量名, 过滤器, 参数)
  • 通常通过 http请求发送过来的,表单,get,post
  • 比如:http://php.pro/?id=3

var_dump(filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT));

3.2.4:filter_input_array() 获取多个外部变量过滤

  • 比如:http://php.pro/?username=peter&email=peter@php.cn&age=18
  1. // 同时验证多个外部变量
  2. $args = [
  3. 'username'=> FILTER_SANITIZE_STRING,
  4. 'email'=>FILTER_VALIDATE_EMAIL,
  5. 'age'=> ['filter'=>FILTER_VALIDATE_INT, 'options'=>['min_range'=> 18, 'max_range'=> 60]],
  6. 'blog'=> FILTER_VALIDATE_URL
  7. ];
  8. var_dump(filter_input_array(INPUT_GET, $args));

4.总结

  • 通过学习,掌握了常量的定义及如何查看所有当前定义的常量;
  • 理解了预定义常量,魔术常量的用法;
  • 对变量的作用域有了初步认识;
  • 理解了变量过滤器的作用。
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议