2010-02-08 262 views
34

我想在類的另一個方法中使用方法。我在PHP5 OOP方面沒有太多經驗,我四處尋找答案,但找不到任何答案。我試圖在同一個類中的sendRequest()中使用getClientInfo()。從同一個PHP類中的另一個方法調用一個方法

class DomainHandler { 

    public static function getClientInfo($db, $client_id) 
    { 
     //Do stuff 
    } 

    public static function sendRequest($details) 
    { 

     require_once('MySQL.class.php'); 
     $db = new MySQL; 

     getClientInfo($db, $client); 
    } 
} 

,它告訴我:

Fatal error: Call to undefined function getClientInfo()

我也試過

parent::getClientInfo($db, $client); 

$this->getClientInfo($db, $client); 

無濟於事。

任何想法?

回答

40

這是一種靜態方法,因此您必須使用self::getClientInfoDomainHandler::getClientInfo來調用它。另外:你可能想要閱讀面向對象編程,因爲它看起來還沒有明白它的真正含義(它不僅僅是在Foo {和}類之間放置函數並將公共靜態放在它們前面)

+3

謝謝!是的,我知道我對OOP(PHP5)完全知之甚少,但不幸的是,我的老闆不會給我一天的時間閱讀他現在想要修正的內容。 :) Tbh,我真的不知道爲什麼你有一個方法之前的靜態和公共?但我會到達那裏。再次感謝您的幫助。 – 2010-02-08 10:34:28

3

「自我」是你要找的

提到的關鍵字,你能解釋一下爲什麼你需要你的方法是靜態的? 「靜態」是不好的風格,應該避免。

+1

我不會說'靜態'是不好的風格事件,儘管我同意在這種情況下它可能沒有被正確使用。靜態有一個地方,有時不讓靜態的東西是不好的風格。我同意,許多人錯誤地使用靜態方法,只使用類,就像只使用靜態方法使用C++命名空間=> _that_是不好的風格。 – dbemerlin 2010-02-08 10:32:22

17

您宣佈函數爲static,因此它們不在對象上下文–中,您可以使用DomainHandler::getClientInfo()self::getClientInfo()來調用它們。

如果你沒有明確地需要這些功能是靜態的,你可以刪除static關鍵字,然後$this->getClientInfo()將工作。

+0

以及如果他想要該方法是靜態的呢? – Natrium 2010-02-08 10:20:15

+4

@Natrium,那麼他可以使用我先建議的。 – 2010-02-08 10:21:31

+2

對不起,我的眼睛裏一定有沙... – Natrium 2010-02-08 11:48:06

相關問題