2009-08-25 70 views
0

我最近在一個php項目中遇到了問題,我終於意識到自己已經構建了我的類。如果我試圖在頁面中包含多個類並且這兩個類共享相同的父類,那麼腳本將失敗。我現在已經解決了這個問題,但是想知道是否有人能夠向我解釋爲什麼我在做的事情沒有起作用,因爲我沒有充分理解它。 以下是對沒有工作的說明:新手php類繼承問題

A級
B類擴展A.
C級擴展A.
類d擴展B.
E類擴展C.

我需要D類和E類,並且腳本失敗。如果C類不繼承A,那麼它一切正常。 很顯然,這與要求A類兩次有關,但是有人可以用非常簡單的術語來解釋它嗎?!?!?

+0

你得到了什麼錯誤信息? – RaYell 2009-08-25 14:28:40

回答

3

您可以只聲明一次每個類。如果您需要多次定義您的類的文件,解析器遇到class A,進行內部查找並釋放:'嘿,您已經定義了該類'。最簡單的解決方案是將每個類放入其自己的文件中,並調用require_once而不是require

+0

我認爲這可能是...我總是使用require而不是require_once,因爲我並不知道它們有什麼區別!每個類都在它自己的文件中。 – musoNic80 2009-08-25 14:47:14

3

您是否在每個課程都有自己的文件?

你使用require/include而不是require_once/include_once嗎? include_once和require_once不共享包含文件的同一個表,因此您必須始終使用一個。

或者一直使用PHP5中的__autoload函數。

2

included文件中定義的任何函數或類都在全局範圍內聲明。這就是爲什麼你可能會得到重新聲明的錯誤。解決方法是使用require_onceinclude_once而不是requireinclude

儘管最優雅的方法是使用__autoload,但這需要PHP版本5或更高版本。自動加載唯一的缺點是任何失敗都是一個你無法自己處理的致命錯誤。