博客列表 >php的变量作用域&常量&命名空间初步认识和变量过滤器

php的变量作用域&常量&命名空间初步认识和变量过滤器

嘬一口啊
嘬一口啊原创
2020年07月07日 17:32:03764浏览

变量作用域

作用域是变量的生效范围

作用域是查找变量的工具

1.全局作用域

写在函数外的变量:是全局作用域的变量

  1. 例:
  2. $siteName = 'hello';

2.函数作用域

在函数内部使用外部变量的两种方法

1.使用global在函数内部声明一下要使用的外部变量

  1. // 外部定义变量
  2. $siteNAme = 'hello';
  3. function getinfo(){
  4. // 使用globel在函数内部声明一下这个变量实现调用外部变量
  5. global $siteName;
  6. return $siteName;
  7. }
  8. // 调用函数
  9. echo getinfo(); // 输出 hello

2.声明一个超全局数组,在全局中创建的变量会自动成为超全局数组$GLOBALS中的一个元素[叫全局变量]

  1. 例:
  2. // 外部定义一个变量
  3. $siteName = 'hello';
  4. function getinfo(){
  5. // 在内部使用超全局数组访问超全局变量
  6. $GLOBALS['siteName']
  7. }
  8. // 调用函数
  9. echo getinfo(); // 输出hello

常量

定义常量的两种方法

1.关键字const 常量名;

  1. 例:
  2. const SITE_NAME = 'demo';

2.函数define('常量名','常量值');

  1. 例:
  2. define('APP_NAME','管理系统');

get_defined_constants(true)查看系统中预定义的常量

get_defined_constants(true);这里的参数true写上会把系统的预定义常量分类

get_defined_constants(true)['user']查询用户自定义的常量

类中的常量只能用const关键字来定义

  1. 例:
  2. class User {
  3. const NAME = '张三';
  4. }
  • 注意事项

1.常量前没有$符号

2.常量必须初始化

  1. 例:
  2. const NAME = '张三';或define('NAME','张三');

3.常量不予许删除

  1. 例:
  2. const NAME = '张三';unset(NAME); // 不被允许

4.常量不受作用域限制

  1. 例:
  2. const NAME = '张三';
  3. function getinfo(){
  4. return Name;
  5. }
  6. echo getinfo(); // 输出 "张三"

5.在同一空间内常量不予许重定义[相当于不予许重新赋值]

  1. 例:
  2. // 在同一空间下这样是错误的
  3. const APP_PATH = '张三';
  4. const APP_PATH = '李四';
  • 预定义常量
预定义常量 作用
PHP_VERSION 查看版本号
PHP_OS_FAMILY 查看操作系统
PHP_INT_MAX 查看最大整数
PHP_FLOAT_MAX 查看最大浮点数
DIRECTORY_SEPARATOR 查看目录分隔符
  • 魔术常量
魔术常量 描述
__LINE__ 文件中的当前行号
__FILE__ 文件的完整路径和文件名
__DIR__ 文件所在目录
__FUNCTION__ 当前的函数名称
__CLASS__ 当前类名称
__TRAIT__ 当前Trait名称
__METHOD__ 当前类方法名称
__NAMESPACE__ 当前命名空间名称

命名空间

全局成员不允许被重复定义,类与函数也是全局成员,也不允许重复定义

全局成员包括:常量,类[接口属于类的一种],函数

  • 创建命名空间

namespace 空间名 { 内容 } // 当前文件独属于当前这个命名空间时{}可去掉直接 namespace 命名空间名称 即可

  1. 创建命名空间:
  2. 例:
  3. // 命名空间ns1
  4. namespace ns1 {
  5. const APP_PATH = '/phpstudy_pro';
  6. }
  7. // 命名空间ns2
  8. namespace ns2 {
  9. const APP_PATH = '/public';
  10. // 在命名空间ns2中访问命名空阿ns1中的常量APP_PATH
  11. echo \ns1\APP_PATH;
  12. }
  13. // 访问命名空间中的常量
  14. //在全局空间中访问命名空间中的常量
  15. namespace {
  16. echo \ns1\APP_PATH,"<br>";
  17. echo \ns2\APP_PATH,"<br>";
  18. }

变量过滤器

查看当前php版本支持的预定义过滤器有哪些

  1. foreach (filter_list() as $filter) {
  2. echo $filter . ' => ' .filter_id($filter) . '<br>';
  3. }
  4. // 我的当前php版本7.1.13 输出支持的预定义过滤器
  5. // 左边过滤器名称 ,右边过滤器id
  6. int===>257
  7. boolean===>258
  8. float===>259
  9. validate_regexp===>272
  10. validate_domain===>277
  11. validate_url===>273
  12. validate_email===>274
  13. validate_ip===>275
  14. validate_mac===>276
  15. string===>513
  16. stripped===>513
  17. encoded===>514
  18. special_chars===>515
  19. full_special_chars===>522
  20. unsafe_raw===>516
  21. email===>517
  22. url===>518
  23. number_int===>519
  24. number_float===>520
  25. magic_quotes===>521
  26. callback===>1024
  • 1.过滤单个变量 filter_var()

filter_var(要过滤的变量, 过滤器常量)

filter_var(要过滤的变量,过滤器常量,对过滤变量的限制)

FILTER_VALIDATE_INT过滤/检测当前变量是否是整数型数值

FILTER_VALIDATE_EMAIL过滤/检测当前变量是否是符合邮箱类型

  1. 例:
  2. $age = 21;
  3. var_dump(filter_var($age,FILTER_VALIDATE_INT)); // 输出int(21);
  4. $ages = '23'; // 当前变量的值是字符串型数值
  5. var_dump(filter_var($age,FILTER_VALIDATE_INT)); // 输出int(23);
  6. `解释:过滤器验证时会自动把过滤变量转换为字符串,所以过滤变量的值为数值型字符串可以如$age='abc'这就直接输出false因为abc不是数值型字符串不能转换为有效数值`
  7. // 给过滤变量添加限制
  8. 例:
  9. $ages = '23';
  10. // 这里声明一个二位数组来限制过滤变量$age的值 min-range是最小值 max_range是最大值
  11. // 如果过滤的变量超过限制的值也会输出false;
  12. $options = ['options'=>['min-range'=>'18','max-range'=>'80']];
  13. // 输出打印过滤变量
  14. var_dump(filter_var($age,FILTER_VALIDATE_INT,$options));// 输出int(23);
  15. // 过滤邮箱
  16. 例:
  17. $email = 'ceshi@qq.com'; // 定义一个邮箱格式字符串
  18. var_dump($email,FILTER_VALIDATE_EMAIL); // 输出"ceshi@qq.com"
  19. // 另一种方式可以过滤常量的id代替常量名
  20. var_dump($email,274); // 输出效果和写过滤常量的效果一样 输出"ceshi@qq.com"
  • 2.验证过滤多个变量 filter_var_array()

filter_var_array(过滤变量[把所有要过滤的变量放进一个数组在赋值给一个变量],过滤器名称)

  1. 例:
  2. $a = 10;
  3. $b = '80';
  4. // 把所有要过滤验证的变量放进一个数组
  5. $arr = [$a,$b];
  6. // 过滤检测当前数组值是否都是整数型不是的输出false是的直接输出
  7. var_dump(filter_var_array($arr,FILTER_VALIDATE_INT)); // 输出结array(2) { [0]=> int(10) [1]=> int(80) }
  • 3.过滤验证外部变量filter_input()

filter_input(输入传递方式/get,post,变量名,过滤器,参数)

  1. 例:
  2. // 使用GET方式传参来演示外部变量的获取和验证/过滤
  3. $id = $_GET['id']; // 这个id是通过get方式从地址栏中传过来的
  4. $options = ['options'=>['min_range'=> 1]]; // 限制id最小是1
  5. var_dump(filter_input(INPUT_GET,'id',FILTER_VALIDATE_INT,$options));
  • 4.同时验证多个外部变量

filter_var_array(输入传递方式/get,post,过滤数组)

  1. 例:
  2. $args = [
  3. 'username'=> FILTER_SANITIZE_STRING,
  4. 'email'=>FILTER_VALIDATE_EMAIL,
  5. 'age'=> ['filter'=>FILTER_VALIDATE_INT, 'options'=>['min_range'=> 18, 'max_range'=> 60]],
  6. 'blog'=> FILTER_VALIDATE_URL
  7. ];
  8. // 哪一个不符合直接输出false
  9. var_dump(filter_input_array(INPUT_GET,$args));// 输出 int(9) array(4) { ["username"]=> string(15) "'admin'" ["email"]=> string(12) "ceshi@qq.com" ["age"]=> int(18) ["blog"]=> string(24) "https://www.php.cn/blog/" }
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议