может кто-нибудь объяснить, как использовать не статическое свойство в статическом методе в php, это неправильный код, но я хочу знать, как исправить это, спасибо
<?php class SomeClass { public $_someMember; public function __construct() { $this->_someMember = 1; } public static function getSomethingStatic() { return $this->_someMember * 5; // here's the catch } } echo SomeClass::getSomethingStatic(); ?>
Вы не можете напрямую. Вам нужно создать экземпляр объекта. Вы можете сделать это и передать его статическому методу или сделать его в теле статического метода.
Для обычных (нестатических) свойств требуется экземпляр объекта данного класса (типа). Статические методы вызывают, ссылаясь на сам класс, а не на объект.
Однако вы можете использовать статические свойства или константы для статических методов без создания экземпляра объекта вообще.
Вы должны создать экземпляр объекта
<?php class SomeClass { public $_someMember; public function __construct() { $this->_someMember = 1; } public static function getSomethingStatic() { $object = new self(); return $object->_someMember * 5; // here's the catch } } echo SomeClass::getSomethingStatic();
Вы можете статически создать экземпляр класса, который метод вызывается при помощи:
$instance = new static();
Вы также можете статически создавать экземпляры класса, который фактически определяет метод через:
$instance = new self();
В качестве примера возьмем эти классы First
и Second
.
class First { public static function getStatic() { return new static(); } public static function getSelf() { return new self(); } } class Second extends First{ }
Second::getStatic()
, мы получим экземпляр Second
. Second::getSelf()
, мы получим экземпляр First
. First
, мы получим экземпляр First
. Это означает, что вы можете изменить свой метод на:
public static function getSomethingStatic() { $instance = new static(); // or new self() if you always want to use 'SomeClass' // and never an extending class. return $instance->_someMember; }