web-dev-qa-db-ja.com

静的関数内でこれを使用すると失敗する

私は$ thisを使用したいこのメソッドを持っていますが、私が得るすべては致命的なエラーです:オブジェクトコンテキストではないときに$ thisを使用しています。

これを機能させるにはどうすればよいですか?

public static function userNameAvailibility()
{
     $result = $this->getsomthin();
}
64
Jom

これが正しい方法です

public static function userNameAvailibility()
{
     $result = self::getsomthin();
}

つかいます self:: の代わりに $this-> forstaticメソッド

参照:PHP静的メソッドチュートリアル詳細については:)

116
Sarfraz

静的関数はインスタンス化されたオブジェクトから独立しているため、$thisを静的関数内で使用することはできません。関数を静的ではないものにしてください。

編集:定義により、インスタンス化されたオブジェクトなしで静的メソッドを呼び出すことができるため、静的メソッド内での$thisの意味のある使用はありません。

13
catchmeifyoutry

Self ::を使用して静的関数内で呼び出すことができるのは静的関数のみです。使用する非静的関数がクラスに含まれている場合、同じクラスのインスタンスを宣言して使用できます。

<?php
class some_class{
function nonStatic() {
    //.....  Some code ....   
    }
 Static function isStatic(){
    $someClassObject = new some_class;
    $someClassObject->nonStatic();
    } 
}
?>
2
Gourav

アクセサーthisは、クラスの現在のインスタンスを参照します。静的メソッドはインスタンスから実行されないため、thisの使用は禁止されています。したがって、ここでメソッドを直接呼び出す必要があります。静的メソッドは、インスタンスのスコープ内の何にもアクセスできませんが、インスタンススコープ外のクラススコープ内のすべてにアクセスできます。

2
Kangkan

クラスのメソッドが間違った方法で呼び出されたときに起こることの例を次に示します。このコードを実行するといくつかの警告が表示されますが、動作し、「I'm A:Printing B property」というメッセージが表示されます。 (php5.6で実行)

class A {
    public function aMethod() {
        echo "I'm A: ";
        echo "printing " . $this->property;
    }
}

class B {
    public $property = "B property";

    public function bMethod() {
        A::aMethod();
    }
}

$b = new B();
$b->bMethod();

静的メソッドとして呼び出されるメソッドで使用される変数$ thisは、「呼び出し元」クラスのインスタンスを指していることを示しています。上記の例では、Bクラスのプロパティを指すAクラスで使用される$ this-> propertyがあります。

編集:

疑似変数$ thisは、オブジェクトコンテキスト内からメソッドが呼び出されたときに使用できます。 $ thisは、呼び出し元オブジェクトへの参照です(通常はメソッドが属するオブジェクトですが、メソッドがセカンダリオブジェクトのコンテキストから静的に呼び出される場合は、別のオブジェクトである可能性があります)。 PHP>基本

1
Nicolai Nita

それは残念ですPHPは十分な説明的エラーを表示しません。静的関数内で$ this->を使用することはできませんが、内部で関数を呼び出す必要がある場合はself ::を使用します同階級

0
Midas Mtileni