如何正確理解PHP include作用域
很多程序員在使用PHP語言進(jìn)行實(shí)際編程時(shí),通常只會(huì)關(guān)注PHP函數(shù)能實(shí)現(xiàn)什么功能,但是都不會(huì)去深入的了解這個(gè)函數(shù)的具體含義及隱含的問題。我們今天就為大家介紹PHP include作用域的相關(guān)問題。#t#
注意:本文檔基于include敘述,但也適用于 require。這兩種結(jié)構(gòu)除了在如何處理包含失敗之外,其他完全一樣:在包含失敗時(shí),include()產(chǎn)生一個(gè)警告并繼續(xù)執(zhí)行,而require()則導(dǎo)致一個(gè)致命錯(cuò)誤。換句話說,如果想在遇到丟失文件時(shí)停止處理頁面就用require(),否則就用include()。
PHP include作用域1、c
- < ?php
- $color = 'green';
- $fruit = 'apple';
- ?>
- < ?php
- function foo()
- {
- global $color;
- include 'vars.php';
- echo "A $color $fruit";
- }
- foo();
- // A green apple
- echo "A $color $fruit";
- // A green
- ?>
由此例可看出:
(1) 被包含文件的變量的PHP include作用域遵從包含文件所在處的作用域。即在函數(shù)里使用include將其他文件的變量包含進(jìn)來,這些變量的作用域?yàn)樵摵瘮?shù)內(nèi)。
(2) foo()函數(shù)外能打印出$color的值,并沒有違反(1)的規(guī)定。那是因?yàn)楹瘮?shù)開始已經(jīng)聲明$color為global (盡管foo()函數(shù)外并沒有$color變量,此時(shí)的$color變量并不是vars.php里面的$color變量,而是一個(gè)強(qiáng)制聲明為“全局”的新變量,這時(shí)它還沒有被賦值,當(dāng)下面包含進(jìn)vars.php后,根據(jù)(1)的原則,vars.php中的$color變量自動(dòng)享有函數(shù)內(nèi)的作用域,所以它的值就是全局變量$color的值)
PHP include作用域2、函數(shù)、類的作用域
- < ?php
- class ClassB {
- /**
- * constructor
- */
- public function __construct(){}
- /**
- * destructor
- */
- public function __destruct() {}
- public function printit() {
- echo 'print it in ClassB.<br />';
- }
- }
- function show_func_included() {
- echo 'show_func_included<br/>';
- }
- ?>
- < ?php
- function include_class() {
- include('classb.php');
- }
- include_class();
- $objB = new ClassB();
- $objB->printit();
- // print it in ClassB.
- show_func_included()
- // show_func_included
- ?>
由此例可以看出:
所有在被包含文件中定義的函數(shù)和類在被包含后,在包含文件里都具有全局作用域
結(jié)論:
1、被包含文件的變量的PHP include作用域遵從(不改變)包含文件所在處的作用域。
2、所有在被包含文件中定義的函數(shù)和類在被包含后,在包含文件里都具有全局作用域