Using $this when not in object context
状況
クラス内の別メソッドを使おうとしたときに出たエラー。
Using $this when not in object context(オブジェクトコンテキストにないときに$ thisを使用する)
以下のようにしたときに出た。
public static function hoge() {
return $this->test;
}
⇒「self::」にする
static、$this、self::について
staticについての理解ができてなかった。
cf, static キーワード(PHPマニュアル)
以下、マニュアルから基本的な理解。
・疑似変数 $this は、 static として宣言されたメソッドの内部から利用することはできない。
・static プロパティは、 スコープ定義演算子(::) を使ってアクセスできるが、 オブジェクト演算子 (->) を使ってアクセスすることはできない。
・staticはインスタンス化されたクラスオブジェクト(new hoge())からアクセスすることはできない。
試してみる。インデントは直してほしい。
プロパティの場合
class testcase {
public $testtest = 'テスト';
public static $test = 'testだよ';
public static function hoge() {
return self::$test;//ok、1
return $this->$test;//NG、2
}
}
$res1 = testcase::hoge();
$testcase = new testcase();
$res2 = $testcase->hoge();
$res3 = $testcase->testtest;
var_dump($res1);//string(10) "testだよ"、1
var_dump($res1);//PHP Fatal error: Uncaught Error: Using $this when not in object context、2
var_dump($res2);//string(10) "testだよ"
var_dump($res3);//string(9) "テスト"
メソッドの場合
<?php
class testcase {
public static function hoge() {
return self::hoge2();//OK
return $this::hoge2();//NG
}
public static function hoge2() {
return "ok";//ok
return self::$test;//ok
return $this->$test;//NG
}
}
$res1 = testcase::hoge();
var_dump($res1);//string(2) "ok"
?>
<?php
class testcase {
public $testtest = 'テスト';
public static $test = 'testだよ';
public function hoge() {
return $this->hoge2();//ok
}
public function hoge2() {
return $this->testtest;//ok
}
}
$testcase = new testcase();
$res = $testcase->hoge();
var_dump($res);//テスト
?>
<?php
class testcase {
public $testtest = 'テスト';
public static $test = 'testだよ';
public function hoge() {
return self::hoge2();//ok
}
public function hoge2() {
return $this->testtest;//ok
return self::testtest;//NG
}
}
$testcase = new testcase();
$res = $testcase->hoge();
var_dump($res);//Uncaught Error: Undefined constant
?>
staticの場合、×…$this、-> 、new ⇒ スコープ定義演算子(::)を使う