(非常重要)如何正确理解PHP之include,include_once,require,require_once等包含作用域

来源:互联网 发布:qt软件架构 编辑:程序博客网 时间:2024/05/16 13:43

我们为大家总结的PHP include作用域的问题包括:PHP include 变量作用域和函数的作用域等方面的问题。希望对大家有所帮助。

很多程序员在使用PHP语言进行实际编程时,通常只会关注PHP函数能实现什么功能,但是都不会去深入的了解这个函数的具体含义及隐含的问题。我们今天就为大家介绍PHP include作用域的相关问题。

注意:本文档基于include叙述,但也适用于require。这两种结构除了在如何处理包含失败之外,其他完全一样:在包含失败 时,include()产生一个警告并继续执行,而require()则导致一个致命错误。换句话说,如果想在遇到丢失文件时停止处理页面就用 require(),否则就用include()。

PHP include作用域1:变量的作用域

01<?php
02$color 'green';
03$fruit 'apple';
04?>
05 
06<?php
07function foo() {
08    global $color;
09    include 'vars.php';
10    echo "A $color $fruit";
11}
12 
13foo(); // A green apple
14echo "A $color $fruit"// A green
15?>

由此例可看出:

(1). 被包含文件的变量的PHP include作用域遵从包含文件所在处的作用域。即在函数里使用include将其他文件的变量包含进来,这些变量的作用域为该函数内

(2). foo()函数外能打印出$color的值,并没有违反(1)的规定。那是因为函数开始已经声明$color为global (尽管foo()函数外并没有$color变量,此时的$color变量并不是vars.php里面的$color变量,而是一个强制声明为“全局”的新 变量,这时它还没有被赋值,当下面包含进vars.php后,根据(1)的原则,vars.php中的$color变量自动享有函数内的作用域,所以它的 值就是全局变量$color的值)

PHP include作用域2:函数、类的作用域

01<?php
02class ClassB {
03    /**
04     * constructor
05     */
06    public function __construct() {
07 
08    }
09 
10    /**
11     * destructor
12     */
13    public function __destruct() {
14 
15    }
16 
17    public function printit() {
18        echo 'print it in ClassB.<br />';
19    }
20}
21 
22function show_func_included() {
23    echo 'show_func_included<br/>';
24}
25?>
26 
27<?php
28function include_class() {
29    include('classb.php');
30}
31include_class();
32$objB new ClassB();
33$objB->printit(); // print it in ClassB.
34show_func_included() // show_func_included
35?>

所有在被包含文件中定义的函数在被包含后,在包含文件里都具有全局作用域(相当于把“函数”、“”的代码附加到包含文件的头部)。

结论:
1、被包含文件的变量的PHP include作用域遵从(不改变)包含文件所在处的作用域。
2、所有在被包含文件中定义的函数在被包含后,在包含文件里都具有全局作用域。
0 0
原创粉丝点击