Я пытаюсь понять статическое поведение свойства в абстрактном class.this примера кода извлекается из PHP объектных моделей и практика книги (глава 11-орнамент):PHP поведение статического свойства
abstract class Expression {
private static $keycount=0;
private $key;
function getKey() {
if (! isset($this->key)) {
self::$keycount++;
$this->key=self::$keycount;
}
return $this->key;
}
}
от этого абстрактного класса распространяется ряд подклассов, а затем при создании экземпляра будет вызываться метод getKey()
. Каждый проверяет его собственное свойство $key
и, если его значение равно null, затем увеличиваем $keycount
на единицу и присваиваем его $key
.
как я понимаю $keycount
сохранить последнее значение независимо от того, какой подкласс работает. я имею в виду, что это в контексте абстрактного класса НЕ контекст подклассов. если он был зависим от своего подкласса, тогда он будет сброшен на 0
в каждом подклассе. Кто-нибудь может дать мне больше информации об этом?
Если вы хотите как количество каждого подкласса, а затем определить 'защищенный статический $ keycount = 0; и' protected $ key; 'в каждом подклассе, где вы хотите индивидуальное подсчет, и изменить' self :: $ keycount ++; $ this-> key = self :: $ keycount; 'to' static :: $ keycount ++; $ this-> key = static :: $ keycount; ' –
Помните, что существует только один экземпляр переменной' Expression :: $ keycount'. Это то, что подразумевает «статический». Он доступен для экземпляра 'Expression'_. Таким образом, всякий раз, когда метод getKey() вызывается из любого экземпляра, он может обновлять переменную «один экземпляр» и только «выражение». Примечание. Каждый экземпляр имеет свою локальную переменную $ key. –
@ RyanVincent спасибо. ваш комментарий может быть лучшим ответом – alex