Я пытался сделать тест и посмотреть, как static () и self () отличаются друг от друга в объектно-ориентированном php, поэтому я написал этот простой код:
class Base{
public function __construct(){
// return new self();
return new static();
}
}
class Sub extends Base {
public function foo(){
echo 'yes';
}
}
$obj = new Sub();
$obj->foo();
Но, как ни странно, ни одно из двух ключевых слов (self / static) в базовом классе, похоже, не работает так, как я ожидаю. Я ожидаю ошибки при использовании self
и исправлении этой ошибки с помощью static
. Но теперь оба дают ошибку:
Допустимый объем памяти в xxxx байтах исчерпан (попытался выделить xxxx байтов)
Я искал эту ошибку, и она считается результатом "утечки памяти" в программе, но я не могу найти, где я допустил эту утечку.
П.С .: Может быть, я не понимаю себя и статичность должным образом? Я понимаю, что self ссылается на «содержащий класс», а static ссылается на «вызывающий класс».