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

PHP变量作用域和变量过滤器及常量命名空间

知行合一
知行合一原创
2020年07月09日 17:32:08725浏览

变量作用域

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

  • 全局变量:函数外部创建的变量。
  • 私有变量:在函数内部创建的叫私有变量
  • 全局作用域,写到函数的外部的变量。
  • 函数作用域,写在函数内部的变量。在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>';

总结

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

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议