web-dev-qa-db-ja.com

同じPHPクラスの別のメソッドからメソッドを呼び出す

クラス内の別のメソッド内からメソッドを使用しようとしています。 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);

無駄に。

何か案は?

36

これは静的メソッドなので、self::getClientInfoまたはDomainHandler::getClientInfoを使用して呼び出す必要があります。

また、オブジェクト指向プログラミングについては、実際の内容がまだ理解されていないように見えるため、読み上げたいと思うかもしれません(クラスFoo {と}の間に関数を置き、それらの前にpublic staticを置くだけではありません)

42
Morfildur

関数を static として宣言しているため、オブジェクトコンテキストにありません。DomainHandler::getClientInfo()またはself::getClientInfo()で呼び出すことができます。

関数を静的にする必要がない場合は、staticキーワードを削除すると、$this->getClientInfo()が機能します。

19
Tatu Ulmanen

「自己」はあなたが探しているキーワードです

そうは言っても、メソッドを静的にする必要がある理由を説明できますか? 「静的」はスタイルが悪いため、避ける必要があります。

3
user187291