Blogger Information
Blog 9
fans 0
comment 0
visits 7976
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
变量类型、超全局变量、静态变量、变量与常量作用域和过滤器的理解
若是梦终会醒
Original
837 people have browsed it

变量、过滤器和常量

1.1 函数作用域

函数作用域是function关键字创建的作用域

  1. function index()
  2. {
  3. $date['uid'] = 1;
  4. return $date['uid'];
  5. }
  6. unset($date['uid']);//未定义报错
  7. echo index();//1
  8. unset($date['uid']);//未定义报错
  9. function add()
  10. {
  11. $date['pid'] = 1;
  12. unset($date['pid']);
  13. unset($date['uid']);
  14. return $date['pid'];//未定义报错
  15. }
  16. echo add();//无输出
  17. echo index();//1

小结:

date[‘uid’]只能在index函数中起作用 在index函数外访问会出现未定义报错

1.2 全局作用域

函数之外的变量生效范围

1.3 变量类型

  • 私有变量
  • 全局变量
  • 超全局变量

1.3.1 私有变量

函数中定义的变量

1.3.2 全局变量

函数之外定义的变量

1.3.3 超全局变量

超全局变量,也叫超全局数组,随系统加载,因此在所有脚本中均有定义,全局和函数中都可以访问

序号 变量名 描述
1 $GLOBALS 引用全局作用域中可用的变量
2 $_SERVER 服务器执行环境信息
3 $_GET HTTP GET 请求:通过 URL 参数传递给当前脚本的变量的数组
4 $_POST HTTP POST 请求: 将变量以关联数组形式传入当前脚本
5 $_FILES HTTP 文件上传变量,保存着上传文件的全部信息
6 $_COOKIE 通过 HTTP Cookies 方式传递给当前脚本的变量的数组
7 $_SESSION 当前脚本可用 SESSION 变量的数组
8 $_REQUEST 默认情况下包含了 $_GET$_POST$_COOKIE 的数组
9 $_ENV 通过环境方式传递给当前脚本的变量的数组

1.3.4 global 和 $GLOBALS 的使用

  1. global $name="xu.bug";//Parse error: syntax error, unexpected '=', expecting ',' or ';'
  2. function index()
  3. {
  4. //试图引用函数外面的变量
  5. echo "myname is ".$name."<br>";
  6. }
  7. index();

即上述代码有错误。原因是 global的用法不对,不能在用global声明变量的同时给变量赋值。

  1. global $name;
  2. $name="xu.bug";
  3. function index()
  4. {
  5. //试图引用函数外面的变量
  6. echo "myname is ".$name."<br>";//Notice:Undefined variable: name in
  7. myname is
  8. }
  9. index();

即上述代码有错误。原因是 global的用法不对,不能在用global声明变量的同时给变量赋值。

综合以上得出结论:

global的正确用法是:”在一个函数中引入外部的一个变量,如果该变量没有通过参数传递进来,那么就通过global引入进来。” 也就是说,当一个函数引用一个外部变量时,可以在函数内通过global来声明该变量,这样该变量就可以在函数中使用了(相当于当作参数传递进来)。

  1. $name="xs.bug";
  2. function index()
  3. {
  4. global $name;
  5. //试图引用函数外面的变量
  6. echo "myname is ".$name."<br>";
  7. }
  8. index(); //myname is xs.bug

即上述代码说明global是起传递参数的作用,而并非使变量的作用域为全局 。

  1. $name="xs.bug";
  2. function index()
  3. {
  4. $gname=$GLOBALS['name'];
  5. //试图引用函数外面的变量
  6. echo "myname is ".$gname."<br>";
  7. }
  8. index(); //myname is xs.bug

1.3.5 static 静态变量

在函数执行完后,变量值仍然保存 不用静态变量 调用函数后会马上进行销毁

  1. function testStatic() {
  2. static $val = 1;
  3. echo $val;
  4. $val++;
  5. }
  6. testStatic(); //output 1
  7. testStatic(); //output 2
  8. testStatic(); //output 3

1.4 filter过滤器

相关函数

filter_list() 获去过滤器名称

filter_id() 获去过滤器id

filter_input(); 单个传参值验证

filter_input_array(); 数组传参验证

  1. foreach (filter_list() as $filter) {
  2. echo $filter.'------'.filter_id($filter).'<br>';
  3. }
  4. //可遍历出所有名称和id

简单验证

  1. $args = [
  2. 'username' => 513,
  3. 'email' => 274,
  4. 'age' => ['filter' => 257, 'flags'=>FILTER_REQUIRE_SCALAR, 'options' => ['min_range' => 18,'max_range'=>80]],
  5. 'blog' => 273,
  6. ];
  7. var_dump(filter_input_array(INPUT_GET, $args));.

1.5 常量

在整个运行过程中,固定不变的值

1.5.1 定义常量

1 define(常量名,值,[是否区别大小写]) true表示不区分大小写,默认是false,常量名前没有$符,常量名推荐使用大写

  1. <?php
  2. define('NAME','tom'); //定义常量
  3. define('PI',3.14,true); //定义常量,不区分大小写
  4. echo NAME,'<br>',Pi;
  5. //true表示不区分大小写,默认是区分大小写的。

2、定义常量可以用特殊字符,但是在调用的时候必须用constant关键字调用

  1. define('%-%','tom');
  2. echo constant('%-%'); //通过constant获取特殊字符作为常量名的常量

3、判断常量是否定义,通过defined()判断常量是否已经定义

  1. if(!defined('NAME')){
  2. define('NAME','berry');
  3. }
  4. echo NAME; //berry

4、还可以使用const关键字定义常量

  1. const NAME='tom';
  2. echo NAME; //tom

5、define()和const 区别

define()可以函数和流程控制中定义 而const不行

const 可以用在类中 而 define()不行

1.5.2魔术常量

  • 魔术常量属于”预定义常量”, 比较特殊所以单独列出
  • 所谓”魔术”, 是指常量的值, 会随它们在代码中的位置改变而改变
  • 魔术常量不区分大小写, 但是推荐全部大写
序号 魔术常量 描述
1 __LINE__ 文件中的当前行号
2 __FILE__ 文件的完整路径和文件名
3 __DIR__ 文件所在目录
4 __FUNCTION__ 当前的函数名称
5 __CLASS__ 当前类名称
6 __TRAIT__ 当前Trait名称
7 __METHOD__ 当前类方法名称
8 __NAMESPACE__ 当前命名空间名称
Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:下次把作业总结加上
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