オブジェクト スコープ外での $this の使用: PHP 致命的エラーの説明
PHP 致命的エラー「オブジェクト コンテキスト内にない $this の使用」が発生する非オブジェクト コンテキスト内で $this キーワードにアクセスしようとしたとき。 $this キーワードは現在のオブジェクト インスタンスを表し、オブジェクトのメソッドまたはプロパティのスコープ内でのみ使用できます。
質問に示されている、class.php ファイル内でエラーが発生するシナリオ例を考えてみましょう。エラーの原因となる行は次のとおりです。
$this->foo = $foo;
この行は、グローバル変数 $foo の値を現在のオブジェクトの foo プロパティに割り当てます。ただし、この行が存在する __construct() メソッドがオブジェクト コンテキスト内で実行されないため、エラーが発生します。
このエラーを回避するには、$this がコンテキスト内でのみ使用されるようにすることが重要です。オブジェクトのメソッドまたはプロパティの。示されている例では、次のアプローチでエラーが解決されます。
class foobar { public $foo; public function __construct($foo) { $this->foo = $foo; // Now within object context } public function foobarfunc() { return $this->foo(); } public function foo() { return $this->foo; } }
ここで、__construct() メソッドは、オブジェクトの foo プロパティになるパラメーター $foo を受け取ります。さらに、 foobarfunc() メソッドは $this->foo を使用してオブジェクトの foo プロパティを正しく参照します。
オブジェクトを作成せずに foobarfunc() メソッドを呼び出すことが目的の場合は、代わりに静的メソッドを使用する必要があります。例:
class foobar { public static $foo; // Static variable public static function foobarfunc() { return self::$foo; // Reference static variable } }
この場合、クラスを使用して foobarfunc() メソッドを直接呼び出すことができます。オブジェクトインスタンスを必要としない名前。
以上がPHP の致命的なエラー「オブジェクト コンテキストにないときに $this を使用しています」が表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。