博主信息
博文 53
粉丝 3
评论 0
访问量 58886
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
PHP代码变量作用域、常量、命名空间和过滤器
emagic
原创
892人浏览过

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等
  • 规则参数是数组形式表示,键名=>值表示
批改老师:GuanhuiGuanhui

批改状态:合格

老师批语:注意常量要使用大写字母加下滑线进行命名!一定要遵循命名规范!
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号

  • 登录PHP中文网,和优秀的人一起学习!
    全站2000+教程免费学