У меня есть простой класс, и я хочу установить переменную public
из класса.
<?php class AlachiqHelpers { public $height; public static function getHeight($height) { return $this->height - 50; } public static function setHeight($height) { $this->height = $height; } }
В результате я получаю эту ошибку:
Using $this when not in object context
$this
This ключевое слово не может использоваться в статическом контексте!. Дело 1:
Вам нужно удалить ключевое слово static
из функции defintion.
Вместо
public static function setHeight( $height ){
Должно быть
public function setHeight( $height ){
Случай 2:
Если вам действительно нужно сделать это (функция) static
… Вы можете просто использовать ключевое слово self
для доступа к переменной.
public static $height; public static function setHeight( $height ) { self::$height=22; }
Имейте в виду, что переменная $height
также static
<?php class AlachiqHelpers { public static $height; public function getHeight() { return self::$height - 50; } public static function setHeight($height1) { self::$height = $height1; } } $a = new AlachiqHelpers(); $a->setHeight(180); echo $a->getHeight();
OUTPUT :
130
Удалите static
, эти методы не должны быть статическим методом, а методом экземпляра.
$this
не может использоваться в статическом контексте, потому что статический контекст используется всеми экземплярами, но не один.
Статический метод может получить доступ только к статическому свойству.
Нестатический метод может иметь доступ как к нестатистическому свойству (по $this->foo
), так и по статическому свойству ( self::$foo
).
Source
Поскольку статические методы вызываются без экземпляра созданного объекта, псевдопеременная $ this недоступна внутри метода, объявленного как статический.
Вы не можете использовать $this
внутри статической функции, потому что статические функции не зависят от какого-либо объекта-объекта.
Попробуйте сделать функцию не статической.
public function setHeight( $height ){ $this->height=$height; }