2010-10-05 66 views
0

如何從已創建的對象訪問擴展類功能?幫助訪問擴展類功能 - PHP OOP

(A) - 這工作的,按不創建一個對象:

$UserType = 'User_Vote'; 
$vote = User::getVote($UserType)->getVoteQuery(); 

(B) - 試圖從已經創建的對象同樣的想法(這是我想做的事情)將返回錯誤:意外T_PAAMAYIM_NEKUDOTAYIM(意外 '::')

$UserType = 'User_Vote'; 
$object = new User(); 
$vote = $object::getVote($UserType)->getVoteQuery(); 

(C) - 但這種工作原理:

$UserType = 'User_Vote'; 
$object = new User(); 
$objectUserType = $object->getVote($UserType); 
$finalObject = $objectUserType->getVoteQuery(); 

爲什麼不會阻止(B)雙重'::'工作?它看起來與塊(A)相同,除了該對象已經創建。我需要像塊(C)那樣分別調用每個函數來解決這個問題嗎?

+0

*(reference)* [Scope Resolution Operator](http://de.php.net/manual/en/language.oop5.paamayim-nekudotayim.php) – Gordon 2010-10-05 07:51:15

+0

您還在使用PHP4嗎? – Matthew 2010-10-05 07:54:51

+1

感謝Gordon,它說:「從PHP 5.3.0開始,可以使用變量引用類。」我在5.2.6上。所以我不能擁有這個功能。 – JMC 2010-10-05 08:00:35

回答

3

::用於訪問靜態方法或屬性。關鍵字是,而不是對象
->用於訪問對象方法或屬性。它不適用於類。

兩者不可互換。

+0

這解釋了它。謝謝 – JMC 2010-10-05 08:10:29

+2

@JMC BTW,事先決定你的方法應該被稱爲靜態*(作爲類方法)還是作爲對象方法並堅持這個決定。不要在整個代碼中都調用它們,或者當你開始使用類/對象上下文特定的關鍵字,如'self'或'$ this'時,它最終會中斷。 – deceze 2010-10-05 08:16:06

+0

感謝您的額外建議並提供了堅實的基礎。在做出決定之前,我會先閱讀更多內容。當前代碼從返回'self ::'的對象中調用靜態類方法。這是導致問題的混合類型嗎? – JMC 2010-10-05 08:43:18

1

您仍然可以使用->訪問器鏈接PHP 5中的方法。例如。

$vote = $object->getVote($UserType)->getVoteQuery(); 

的一類情況下訪問static方法和屬性時,您應該只使用Paamayim Nekudotayim,或::,沒有對象上下文。