談到了使用require_once 仍然告訴說類被重定義的問題。於是想起了前幾天自己遇到的現象。在這裡和大家說一下,今天才想起調查具體原因,如果大家不說的話就快忘了。看來自己凡事果然不經大腦,大腦的二級緩存,及內存,甚至是硬盤都小的可憐。嗯。
假設有如下三個文件, c.php a.php b.php 對應的存放目錄為:localhost/ localhost/ localhost/demo
代碼如下 復制代碼 c.phpb.php的內容比較有意思,因為它自己要繼承 CLASS A 所以自己把a.php也引入進去了
代碼如下 復制代碼 require_once("../a.php");執行localhost/c.php 系統報錯,報錯信息如下
Warning: require_once(../a.php) [function.require-once]: failed to open stream: No such file or directory in F:wwwdemob.php on line 2
Fatal error: require_once() [function.require]: Failed opening required '../a.php' (include_path='.;C:php5pear') in F:wwwdemob.php on line 2但是,驚奇的發現,如果去掉b.php裡面的require_once語句,執行正常,那麼一定是require_once語句定義多了嗎?原因就是Class A重定義了兩次?可是不會啊。如果我只在c.php裡面加require_once(‘a.php’);這條語句,哪怕我寫兩遍也是沒錯的,那到底是咋回事呢?
原因就是,b.php定義的目錄和c.php執行文件的目錄層級不一致,導致在c.php裡面require_once語句有兩條。使其相當於
原因找到了,因為在c.php裡面,其相對目錄 “..”就是 c.php的上一層了,導致文件找不到報錯。
所以,我們的結論是,在 PHP 裡面,使用require_once的時候,存在不同層級關系,且有相對目錄的使用那麼一定要謹慎,小心。