博客列表 >变量作用域,常量及过滤器

变量作用域,常量及过滤器

简行
简行原创
2020年07月05日 18:03:56578浏览

一.变量作用域

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

1.全局作用域和函数作用域(在php,函数会创建出一个独立的作用域,不能直接访问外部的变量

  1. <?php
  2. // 设置一个全局变量,写在函数外部,全局作用域
  3. $siteName = "php中文网";
  4. function getInfo(){
  5. //函数作用域,只有作用于函数内,私有变量
  6. $siteName2 ="PHP中文网";
  7. return $siteName2;
  8. }
  9. echo getInfo();

2.访问函数外部的变量方法一:声明global

  1. $siteName = "php中文网";
  2. function getInfo(){
  3. // 使用全局变量方法一:声明global
  4. global $siteName;
  5. return $siteName;
  6. }
  7. echo getInfo();

3.访问函数外部的变量方法二:通过超全局变量$GLOBALS

  1. <?php
  2. // 在全局中创建的变量,会自动成为超全局数组$GLOBALS中的一个元素
  3. //超全局变量,在每个脚本中都有预定义
  4. // 超全局变量, 不受作用域限制,可以在函数中直接访问
  5. $siteName = "php中文网";
  6. function getInfo(){
  7. // 使用全局变量方法二:超全局变量$GLOBALS
  8. return $GLOBALS['siteName'];
  9. }
  10. echo getInfo();

二.常量

系统常量:查看系统常量get_defined_constants(true),其中true参数是进行分组:print_r(get_defined_constants(true));
自定义常量:也可用get_defined_constants(true)进行查看;

1.定义常量方式:const APP_NAME = "学生管理系统";define("APP_USER","admin");

2.两种定期的区别在于define()不能类中定义

  1. //两者区别:define()不能类中定义
  2. class Info {
  3. // define("APP_USER","admin");//报错
  4. const APP_NAME = "学生管理系统";//可行
  5. }

3.访问常量:echo APP_NAME;echo constant("APP_USER");;区别在于:

  1. <?php
  2. const APP_NAME="学生管理系统";
  3. $name = "APP_NAME";
  4. //不可行
  5. echo $name;//输出“APP_NAME”
  6. //可行
  7. echo constant($name);//输出“学生管理系统”

4.定义常量注意事项:

  • 常量前没有$;
  • 常量必须初始化:const SEX = 'famale';
  • 常量不让删除;
  • 常量不受作用域限制;
  • 常量推荐全部大写,多个单词之间使用下划线连接;
    预定义常量
    1. echo '版本号: ' . PHP_VERSION . '<br>';
    2. echo '操作系统: ' . PHP_OS_FAMILY . '<br>';
    3. echo '最大整数: ' . PHP_INT_MAX . '<br>';
    4. echo '最大浮点数: ' . PHP_FLOAT_MAX . '<br>';
    5. echo '目录分隔符: ' . DIRECTORY_SEPARATOR . '<hr>';
    魔术常量
序号 魔术常量 描述
1 __LINE__ 文件中的当前行号
2 __FILE__ 文件的完整路径和文件名
3 __DIR__ 文件所在目录
4 __FUNCTION__ 当前的函数名称
5 __CLASS__ 当前类名称
6 __TRAIT__ 当前Trait名称
7 __METHOD__ 当前类方法名称
8 __NAMESPACE__ 当前命名空间名称
常量命名空间
  1. <?php
  2. // 命名空间: 解决了全局成员 的命名冲突问题
  3. // 全局成员: 常量, 类[接口], 函数;
  4. // 全局空间中的成员, 不允许重复定义
  5. namespace ns1 {
  6. const APP_NAME = '学生管理系统';
  7. }
  8. namespace ns2 {
  9. const APP_NAME = '用户管理系统';
  10. }
  11. // 全局空间: 匿名空间
  12. namespace { //访问常量
  13. echo \ns1\APP_NAME;
  14. echo \ns2\APP_NAME;
  15. }

三.过滤器

过滤一个或者多个变量,如果成功,则返回被过滤的数据。如果失败,则返回 FALSE。

1单个过滤(验证):filter_var(要过滤变量,过滤器常量,可选参数)

  1. <?php
  2. $id = 155;
  3. //设置参数
  4. $opt = ['options'=>['min_range'=> 18, 'max_range'=> 60]];
  5. var_dump(filter_var($id,FILTER_VALIDATE_INT,$opt));

2.多个过滤(验证):filter_var_array()

  1. <?php
  2. $id = 50;
  3. $email ="363799120@qq.com";
  4. $arr = [$id,$email];
  5. var_dump(filter_var_array($arr,FILTER_VALIDATE_INT));

3.外部变量过滤,通过 http请求发送过来的(表单,get,post),函数:filter_input(输入类型get/post, 变量名, 过滤器, 参数)

  1. <?php
  2. //通过GET参数来演示获取的外部变量的验证/过滤
  3. //http://myphp.edu/index.php?id=15&username=admin&email=363799120@qq.com&age=33&money=0&url=www.myphp.edu/index.html
  4. $option =[ ///同时验证多个外部变量
  5. "id" =>FILTER_VALIDATE_INT,//验证整数
  6. 'username'=> FILTER_SANITIZE_STRING,//过滤字符串
  7. 'email'=>FILTER_VALIDATE_EMAIL,//过滤邮箱
  8. 'age'=> ['filter'=>FILTER_VALIDATE_INT, 'options'=>['min_range'=> 1, 'max_range'=> 80]],
  9. "money" =>FILTER_VALIDATE_FLOAT,//验证浮点
  10. 'url'=> FILTER_VALIDATE_URL //验证 URL 地址
  11. ];
  12. var_dump(filter_input_array(INPUT_GET,$option));
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议