1. ホーム
  2. php

[解決済み] PHP - エラー "using $this when not in object context" を解決するには?

2022-01-26 21:50:07

質問

このような特質クラスがあります。

trait Example
{
    protected $var;

    private static function printSomething()
    {
        print $var;
    }

    private static function doSomething()
    {
        // do something with $var
    }
}

そしてこのクラス。

class NormalClass
{
    use Example;

    public function otherFunction()
    {
        $this->setVar($string);
    }

    public function setVar($string)
    {
        $this->var = $string;
    }
}

でも、こんなエラーが出るんです。 Fatal error: Using $this when not in object context .

どうすればこの問題を解決できますか?traitクラスでプロパティを使用することはできないのですか?それとも、これは本当に良い習慣ではないのでしょうか?

解決方法は?

クラスのメソッド/プロパティとオブジェクトのメソッド/プロパティの違いに起因する問題です。

  1. あるプロパティをstaticとして定義した場合、クラス名/staticのようにクラスを通してアクセスする必要があります。 self / parent ::$property .
  2. 静的でない場合は、次のような静的プロパティの中にあります。 $this->propertie .

例えば、こんな感じです。

trait Example   
{
    protected static $var;
    protected $var2;
    private static function printSomething()
    {
        print self::$var;
    }
    private function doSomething()
    {
        print $this->var2;
    }
}
class NormalClass
{
    use Example;
    public function otherFunction()
    {
        self::printSomething();
        $this->doSomething();
    }
    public function setVar($string, $string2)
    {
        self::$var = $string;
        $this->var2 = $string2;
    }
}
$obj = new NormalClass();
$obj -> setVar('first', 'second');
$obj -> otherFunction();

静的関数 printSomething は、静的でないプロパティ $var にアクセスできない! 両方not staticで定義するか、両方staticで定義する必要があります。