PHP OOP, Как назначить статическое свойство статическому методу?

может кто-нибудь объяснить, как использовать не статическое свойство в статическом методе в 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(); ?> 

Solutions Collecting From Web of "PHP OOP, Как назначить статическое свойство статическому методу?"

Вы не можете напрямую. Вам нужно создать экземпляр объекта. Вы можете сделать это и передать его статическому методу или сделать его в теле статического метода.

Для обычных (нестатических) свойств требуется экземпляр объекта данного класса (типа). Статические методы вызывают, ссылаясь на сам класс, а не на объект.

Однако вы можете использовать статические свойства или константы для статических методов без создания экземпляра объекта вообще.

Вы должны создать экземпляр объекта

 <?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; }