2010-02-08 201 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

相关问题