【问题标题】:calling a method from another method in same PHP class从同一个 PHP 类中的另一个方法调用一个方法
【发布时间】:2011-01-14 07:35:34
【问题描述】:

我试图在一个类的另一个方法中使用一个方法。我在 PHP5 OOP 方面没有太多经验,我四处寻找答案,但找不到任何答案。我正在尝试在同一个类中的 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);

无济于事。

有什么想法吗?

【问题讨论】:

    标签: php oop class methods


    【解决方案1】:

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

    另外:您可能需要阅读面向对象编程,因为您似乎还没有理解它的真正含义(它不仅仅是将函数放在类 Foo { 和 } 之间并将公共静态放在它们前面)

    【讨论】:

    • 谢谢!是的,我知道我对完整的 OOP (PHP5) 知之甚少,但不幸的是,我的老板不会给我一天的时间来阅读他现在想要修复的东西。 :) Tbh,我真的不知道为什么你在方法之前有 static 和 public ?但我会到达那里。再次感谢您的帮助。
    【解决方案2】:

    'self' 是您要查找的关键字

    也就是说,你能解释一下为什么你需要你的方法是静态的吗? “静态”是一种糟糕的风格,应该避免使用。

    【讨论】:

    • 我不会说“静态”是一种糟糕的风格,尽管我同意在这种情况下它可能没有被正确使用。静态有一个地方,有时不制作静态的东西会是不好的风格。我同意许多人错误地使用静态方法并且只使用类,就像您使用只有静态方法的 C++ 命名空间 => that 是不好的风格。
    【解决方案3】:

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

    如果您不明确需要函数是静态的,则可以删除 static 关键字,然后 $this->getClientInfo() 将起作用。

    【讨论】:

    • 如果他希望方法是静态的怎么办?
    • @Natrium,那么他可以先使用我的建议。
    • Using $this when not in object context 是后面声明的结果
    猜你喜欢
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多