Using $this when not in object context

https://himaise.com/php/

状況

クラス内の別メソッドを使おうとしたときに出たエラー。

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 ⇒ スコープ定義演算子(::)を使う

php, programming

Posted by himajinn