PHP – Как решить ошибку "используя $ this, когда не в контексте объекта"?

У меня есть этот класс признаков:

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 .

Как я могу решить эту проблему? Я не могу использовать свойства в классе признаков? Или это не очень хорошая практика?

Ваша проблема связана с различиями между методами / свойствами класса и объектами.

  1. Если вы определяете свойство как статичное, вы должны получить его через свой класс, например classname / self / parent :: $ propertie.
  2. Если не статичный – то внутри статического свойства, как $ this-> propertytie. Итак, вы можете посмотреть мой код:
 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! Вы должны определить их как не статические, так и статические.