私は$ thisを使用したいこのメソッドを持っていますが、私が得るすべては致命的なエラーです:オブジェクトコンテキストではないときに$ thisを使用しています。
これを機能させるにはどうすればよいですか?
public static function userNameAvailibility()
{
$result = $this->getsomthin();
}
これが正しい方法です
public static function userNameAvailibility()
{
$result = self::getsomthin();
}
つかいます self::
の代わりに $this->
forstaticメソッド。
参照:PHP静的メソッドチュートリアル詳細については:)
静的関数はインスタンス化されたオブジェクトから独立しているため、$this
を静的関数内で使用することはできません。関数を静的ではないものにしてください。
編集:定義により、インスタンス化されたオブジェクトなしで静的メソッドを呼び出すことができるため、静的メソッド内での$this
の意味のある使用はありません。
Self ::を使用して静的関数内で呼び出すことができるのは静的関数のみです。使用する非静的関数がクラスに含まれている場合、同じクラスのインスタンスを宣言して使用できます。
<?php
class some_class{
function nonStatic() {
//..... Some code ....
}
Static function isStatic(){
$someClassObject = new some_class;
$someClassObject->nonStatic();
}
}
?>
アクセサーthis
は、クラスの現在のインスタンスを参照します。静的メソッドはインスタンスから実行されないため、this
の使用は禁止されています。したがって、ここでメソッドを直接呼び出す必要があります。静的メソッドは、インスタンスのスコープ内の何にもアクセスできませんが、インスタンススコープ外のクラススコープ内のすべてにアクセスできます。
クラスのメソッドが間違った方法で呼び出されたときに起こることの例を次に示します。このコードを実行するといくつかの警告が表示されますが、動作し、「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>基本
それは残念ですPHPは十分な説明的エラーを表示しません。静的関数内で$ this->を使用することはできませんが、内部で関数を呼び出す必要がある場合はself ::を使用します同階級