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

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

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

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

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

01
02 $color 'green';
03 $fruit 'apple';
04 ?>
05  
06
07 function foo() {
08     global $color;
09     include 'vars.php';
10     echo "A $color $fruit";
11 }
12  
13 foo(); // A green apple
14 echo "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
02 class 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.
'
;
19     }
20 }
21  
22 function show_func_included() {
23     echo 'show_func_included
'
;
24 }
25 ?>
26  
27
28 function include_class() {
29     include('classb.php');
30 }
31 include_class();
32 $objB new ClassB();
33 $objB->printit(); // print it in ClassB.
34 show_func_included() // show_func_included
35 ?>

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

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

你可能感兴趣的:(PHP)