登录  /  注册
博主信息
博文 24
粉丝 1
评论 0
访问量 20040
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
PHP变量作用域和变量过滤器及常量命名空间
知行合一
原创
689人浏览过

变量作用域

作用域是变量的生效范围,是查找变量的工具。首先理解几个概念。

  • 全局变量:函数外部创建的变量。
  • 私有变量:在函数内部创建的叫私有变量
  • 全局作用域,写到函数的外部的变量。
  • 函数作用域,写在函数内部的变量。在PHP中,函数会创建一个独立的作用域,不能直接访问外部的变量(全局变量)。

函数内部访问外部变量的两种方法

1.在函数内部做一个声明

  1. $siteName='中国网';
  2. function getInfo(){
  3. global $siteName;
  4. return $siteName;
  5. }

2.通过超全局变量$GLOBALS来访问

  1. $siteName='中国网';
  2. function getInfo(){
  3. return $GLOBALS['siteName'];
  4. }

变量过滤器

我们用如下代码可以查看PHP版本支持的预定义过滤器有哪些

  1. foreach (filter_list() as $filter){
  2. echo $filter.'=>'.filter_id($filter).'<br>';
  3. }

过滤单个变量

过滤单个变量使用 filter_var(),用法是
filter_var(要过滤的变量,过滤器常量)
先看下面的代码

  1. //判断是否是整数
  2. $age=30;
  3. $age='aaa';
  4. var_dump(filter_var($age,FILTER_VALIDATE_INT));
  5. echo '<br>';
  6. //在一定范围内验证
  7. $ageTwo='500';
  8. $options=['options'=>['min_range'=>18,'max_range'=>60]];
  9. var_dump(filter_var($ageTwo,FILTER_VALIDATE_INT,$options));
  10. echo '<hr>';
  11. //判断是否邮箱
  12. $email='aa@qq.com';
  13. var_dump(filter_var($email,FILTER_VALIDATE_EMAIL));
  14. echo '<br>';
  15. var_dump(filter_var($email,274)); //这个用的ID也可
  16. echo '<hr>';

结果如图

过滤验证多个变量

过滤验证多个变量使用 filter_var_array()
代码如下

  1. $a=10;
  2. $b='php.cn';
  3. var_dump(filter_var_array([$a,$b],FILTER_VALIDATE_INT));
  4. echo '<br>';
  5. $arr=[$a,$b];
  6. var_dump(filter_var_array($arr,FILTER_VALIDATE_INT));

结果如图

过滤外部变量

通常通过HTTP请求发送过来,表单,POST,GET。使用方法:filter_input(输入类型get/post,变量名,过滤器,参数)
代码如下

  1. echo '<hr>';
  2. // echo $_GET['id'].'<br>'; ID是通过URL中的参数传递过来的
  3. $options=['options'=>['min_range'=>1]];
  4. var_dump(filter_input(INPUT_GET,'id',FILTER_VALIDATE_INT,$options));

结果如图:

同时验证多个外部变量

  1. $args=[
  2. 'username'=>FILTER_VALIDATE_INT,
  3. 'age'=>['filter'=>FILTER_VALIDATE_INT,'options'=>['min_range'=>18,'max_range'=>60]],
  4. 'email'=>FILTER_VALIDATE_EMAIL,
  5. 'blog'=>FILTER_VALIDATE_URL
  6. ];
  7. var_dump(filter_input_array(INPUT_GET,$args));

结果如图:

我们可以看到Email这块是False,因为参数值就不是正确的Email形式。
更多的变量过滤器大家可以查看手册。

PHP常量

查看当前有哪些可用的常量

  1. echo '<pre>'.print_r(get_defined_constants(true),true).'</pre>';//加个true 分组显示

如下图所示

查看用户自定义的常量

  1. echo '<pre>'.print_r(get_defined_constants(true)['user'],true).'</pre>'; //只返回用户自定义的

创建常量的两种方式

两种方式创建常量,关键词const,函数define。 但在类中定义常量只能用const。
常量没有$,不能更新。必须初始化。 常量不可删除,不受作用域限制 常量推荐全部大写,多个单词之间用下划线_隔开

  1. const USERNAME='黄帝';
  2. define('AGE','9999');
  3. class User{
  4. // 类中定义常量只能用const
  5. const USERNAME='炎帝';
  6. // define('age','9999'); //用函数创建则会报错。
  7. }

常量的两种输出方式

  1. echo USERNAME,'<br>';
  2. echo constant('AGE');

两种输出方式的区别

  1. const USERNAME_CHIYOU='蚩尤';
  2. $name='USERNAME_CHIYOU';
  3. echo $name,'<br>'; //显示的是字符串
  4. echo constant($name);//显示的是常量的内容

定义一个特殊常量

  1. define('','aa@qq.com');
  2. echo ''; //显示不出来
  3. echo constant(''); //显示出来了

魔术常量

  1. echo '当前目录:'.__DIR__.'<br>';
  2. echo '当前文件:'.__FILE__.'<br>';
  3. echo '当前行号:'.__LINE__.'<br>';

预定义常量

  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.'<br>';

总结

目前的知识都是一些概念性的,容易理解。能看到,但具体运用,肯定还需要看笔记。 过滤多个变量这块用到了类,目前还不明白,以后学习到再来消化理解!

批改老师:GuanhuiGuanhui

批改状态:合格

老师批语:写的不错!总结可以,不用急于一时,随着知识的增加会理解的!
本博文版权归博主所有,转载请注明地址!如有侵权、违法,请联系admin@php.cn举报处理!
全部评论 文明上网理性发言,请遵守新闻评论服务协议
0条评论
作者最新博文
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

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

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