2014-04-02 112 views
0

我遇到了一個奇怪的問題。如何解決這個遞歸依賴?

在類節點,我需要一些章的,所以我已經包括內部Node.php的Chapter.php文件,如下的功能:

Node.php文件:

require_once('Model.php'); 
require_once('Chapter.php'); 
class Node extends Model { 
... 
} 

Chapter.php文件:

require_once('Node.php'); 
class Chapter extends Node { 
... 
} 

錯誤:

Fatal error: Class 'Node' not found in Chapter.php 

它怎麼沒找到Node類?有什麼辦法解決這個問題?

+0

最有可能它的一些包括路徑問題..你可以確認類文件是在同一水平。 –

+0

是的文件是在同一級別。我100%確定。 – Cris

+1

您有設計問題,請嘗試重新編寫這些類。嘗試[分離](https://www.google.com.bd/search?q=php+decoupling+classes&rlz=1C1KMZB_enBD539BD539&oq=php+decoupl&aqs=chrome.2.69i57j0l3j69i64.5648j0j7&sourceid=chrome&espv=210&es_sm=122&ie=UTF-8 )你的依賴關係。 –

回答

4

這裏是你的代碼是這樣做的:

  1. [Node.php線1]負載(不超過一次)Model.php - 所以它確實是
  2. [Node.php線2]負載(不超過一次)Chapter.php - 這樣做
  3. [Chapter.php line 1]加載(不超過一次)Node.php - 我們已經開始這樣做了,因爲它是require_once,所以沒有需要再次這樣做
  4. [Chapter.php第2行]創建一個類章節擴展節點 - 因爲我們還沒有到達第3行Node.php的,沒有階級Node我們知道

最好的解決辦法是將您的節點所需要的任何功能,從第一章其他地方,可能爲節點。班級不應該依賴於孩子的功能。

1

您應該考慮使用一個autoloader

舉例來說,把這個地方在你的應用程序的開始

function my_autoloader($class) { 
    include 'classes/' . $class . '.php'; 
} 

spl_autoload_register('my_autoloader'); 

然後,當你

new Chapter(); 

PHP將自動包括chapter.php如果類尚未加載。當試圖加載chapter.php它會意識到它需要一個類叫Node並將包括node.php如果該類尚未加載,等