博客列表 >PHP代码变量作用域、常量、命名空间和过滤器

PHP代码变量作用域、常量、命名空间和过滤器

emagic
emagic原创
2020年07月06日 15:34:03656浏览

0703作业

一、 变量的作用域及访问

作用域的意义:

  • 变量的生效范围;

  • 查找变量的工具。

作用域分类 范围
全局作用域 访问全局作用域有两种方法:1.需使用global关键字,表示声明需要到外部去寻找2.使用超全局变量$GLOBALS来访问(推荐)
函数作用域 函数会创建出一个独立的作用域,只能在函数内部访问,也叫私有变量,不能直接访问外部的变量。
  1. <?php
  2. // 查看每个脚本中预定义的超全局变量
  3. echo '<pre>'.print_r($GLOBALS,true);
  4. //超全局变量查看文件路径:
  5. echo $_SERVER['REQUEST_URL'];
  6. echo $_SERVER['SCRIPT_FILENAME'];
  7. // 超全局变量, 不受作用域限制,可以在函数中直接访问
  8. $siteName = "php中文网";
  9. function getInfo(){
  10. // 超全局变量$GLOBALS['键名']
  11. return $GLOBALS['siteName'];
  12. }
  13. echo getInfo();

在全局中创建的变量,会自动成为超全局数组$GLOBALS中的一个元素,可以通过键名调用如:$GLOBALS[‘siteName’];

二、常量的定义及其访问

常量的定义及访问 代码及功能
常量的定义方式 定义常量有2种方式:1.使用const关键字;2.使用define()函数;注意,类中的常量只能够用const定义
常量的访问方式 访问常量也有两种方式:1.直接通过常量名XXXXCONST_NAME;2.constant(‘XXXXCONST_NAME;’,如常量名为空的常量名称只能通过constant()调取)

常量的定义示例

  1. //关键字: const
  2. const APP_PATH = '/phpstudy_pro';
  3. // 函数define
  4. define('APP_NAME', '客户管理系统');
  5. //类常量只允许用const
  6. class User
  7. {
  8. const NATION = 'CHINA';
  9. }
  10. get_defined_constants(true)

常量的访问示例

  1. //查看哪些可用的定义的常量
  2. print_r(get_defined_constants(true));
  3. //查看用户自定义的常量
  4. print_r(get_defined_constants(true)['user']);
  • 常量值被定义后,在脚本的其他任何地方都不能被改变。

  • 常量定义的时候必须初始化

  • 常量前没有$

  • 常量不受作用域限制,的作用域是全局,一旦创建,就不能删除,用unset也不行

  • 常量的命名规范一般全部用大写表示,中间断句分词可以用_下划线连接

常量除了用户自定义以外,还有预定义常量和魔术常量两种系统定义的常量

一些常用的系统预定义常量

常量名 功能
PHP_VERSION 当前PHP版本号
PHP_OS_FAMILY 操作系统
PHP_INT_MAX 最大整数
PHP_FLOAT_MAX 最大浮点数
DIRECTORY_SEPARATOR 目录分隔符(是/还是\不同的系统环境不一样)

魔术常量

一般常量的值都是不变的,魔术常量却是根据系统自动改变,它与变量的区别就是系统自动生成,不是由用户指定和修改的

魔术常量 功能
LINE 当前行号
FILE 文件的完整路径和文件名
DIR 文件所在目录,目录的值不包含最后的/或者\
FUNCTION 当前的函数名称
CLASS 当前类名称
TRAIT 当前Trait名称
METHOD 当前类方法名称
NAMESPACE 当前命名空间名称

命名空间

命名空间用于解决命名冲突的问题

  • 在全局空间中的成员(常量、类、函数、接口)需要具有唯一性。不能重复命令

  • 命名空间namespace,就是来解决这一问题的。

  1. <?php
  2. // 命名空间
  3. // 第一个命名空间,定义了名为model的模型,内容是模型1'
  4. namespace names1 {
  5. const model = '模型1';
  6. }
  7. // 第而个命名空间,定义了同样名为model的模型,但是内容是模型2'
  8. namespace names2 {
  9. const model = '模型2';
  10. }
  11. // 全局空间,默认空间没有名称
  12. // 同样都是名字为model的模型,但是在全局钟通过加入了命名空间区分开了
  13. namespace {
  14. echo \names1\model;
  15. echo '<hr>';
  16. echo \names2\model;
  17. }

就如同Windows中同一个文件夹c:/根目录内不能有两个同为新建文件夹的目录,但是C:/a/新建文件夹 C:/b/新建文件夹通过不同的空间区分开来就可以命名同一个名称

三、变量过滤器

  1. //查询所有的过滤器
  2. foreach (filter_list() as $filter) {
  3. echo $filter . ' => ' . filter_id($filter) . '<br>';
  4. }
  1. <?php
  2. //案例1 过滤int范围
  3. $rent = 3000;
  4. $options = ['options' => ['min_range' => 800, 'max_range' => 20000]];
  5. echo '案例1,过滤int范围结果:';
  6. var_dump(filter_var($rent, FILTER_VALIDATE_INT, $options));
  7. echo '<hr>';
  8. //案例2 过滤浮点格式
  9. $price = 12.5;
  10. echo '案例2,过滤浮点格式结果:';
  11. var_dump(filter_var($price = 12.5, FILTER_VALIDATE_FLOAT));
  12. echo '<hr>';
  13. //案例3 过滤email格式
  14. $email = 'myexxxx@qq.com';
  15. echo '案例3,过滤email格式结果:';
  16. var_dump(filter_var($email, FILTER_VALIDATE_EMAIL));
  17. echo '<hr>';
  18. //案例4 过滤array格式
  19. $arr = ['lat' => 22.025, 'lng' => 133.556];
  20. echo '案例4,过滤array格式结果:';
  21. var_dump(filter_var_array($arr, FILTER_VALIDATE_FLOAT));
  22. echo '<hr>';
  23. //案例5 过滤多个外部变量
  24. $formdata = [
  25. 'username' => FILTER_SANITIZE_STRING,
  26. 'email' => FILTER_VALIDATE_EMAIL,
  27. 'age' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 18, 'max_range' => 120]],
  28. 'sex' => FILTER_VALIDATE_BOOLEAN,
  29. ];
  30. echo '案例5,表单结果:';
  31. var_dump(filter_input_array(INPUT_GET, $formdata));
  32. echo '<hr>';

变量过滤就是一个验证赋值内容是否符合规则,变量的赋值不符合的时候就给于false反馈。正确时通过正常的值。

应用场景如验证年龄范围、性别范围、邮箱是否正确等。

过滤器 功能
filter_var() 获取单个变量,进行过滤
filter_var_array 获取多个变量,进行过滤
filter_input_array() 获取外部多个输入,并进行过滤。外部变量类型: INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV等
  • 规则参数是数组形式表示,键名=>值表示
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议