在同一个PHP类中从另一个方法调用方法

38

我正在尝试在类的一个方法中使用另一个方法。我对PHP5面向对象编程没有太多经验,我搜索了答案,但找不到任何信息。我正试图在同一个类中的sendRequest()方法中使用getClientInfo()方法。

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);
    }
}

这告诉我:

致命错误:调用未定义的函数getClientInfo()

我也尝试过

parent::getClientInfo($db, $client); 
并且
$this->getClientInfo($db, $client);

毫无成果。

有任何想法吗?

3个回答

43

这是一个静态方法,因此您必须使用self::getClientInfoDomainHandler::getClientInfo进行调用。

此外:您可能需要阅读有关面向对象编程的知识,因为看起来您还没有真正理解它的含义(它不仅仅是将函数放在类Foo {和}之间,并在前面加上public static)。


3
谢谢!是的,我知道我对完整的面向对象编程(PHP5)知之甚少,但不幸的是我的老板不会给我一天的假期来查阅他现在想要解决的问题。 说实话,我真的不知道为什么在方法前需要使用static和public??但我会学会的。再次感谢您的帮助。 - Constant Meiring

20

您将函数声明为静态,因此它们不在对象上下文中 – 您可以使用DomainHandler::getClientInfo()self::getClientInfo()调用它们。

如果您没有明确需要这些函数为静态的话,您可以删除static关键字,然后$this->getClientInfo()将可以正常工作。


如果他想要这个方法是静态的呢? - Natrium
5
@Natrium,那他可以使用我最初建议的方法。 - Tatu Ulmanen
1
当不在对象上下文中使用“$this”时,就会得到后面的语句。 - tread

3

'self'是你要寻找的关键字

话虽如此,你能解释一下为什么需要将你的方法设置为静态的吗?"静态"风格不佳,应该避免使用。


1
我不会说“static”是一种糟糕的风格,尽管我同意在这种情况下可能没有正确使用它。static有其适用的场景,有时不将某些内容设为static会是一种糟糕的风格。但我同意许多人错误地使用静态方法,并仅像使用C++命名空间一样使用类和静态方法=> 这才是糟糕的风格。 - user253984

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接