Blogger Information
Blog 17
fans 0
comment 0
visits 19014
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
php的变量作用域&常量&命名空间初步认识和变量过滤器
嘬一口啊
Original
765 people have browsed it

变量作用域

作用域是变量的生效范围

作用域是查找变量的工具

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/" }
Correcting teacher:GuanhuiGuanhui

Correction status:qualified

Teacher's comments:写的还好!不过不要滥用bt_code
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post