Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
А задача у меня достаточно хитрая. Представим, что есть класс А, от него наследуется класс Б. И вот хорошо бы, в методе М1 класса Б, вызвать переопределяемый метод М1 родителя А, но с условием, чтобы родитель вызвал метод текущего класса, НО если он есть у пасынка. В ином случае вызывал бы свой метод. Ничего не понятно? Возможно. Но задача для архитектуры оказалась крайне важна, и тут я вспомнил про static, может он мне наконец пригодится.
Я накидал "абстрактные" три класса, чтобы передать суть:
Человеческим языком это озвучивается просто. У первого сына есть свои деньги, и в жизни он применяет их. А второй сын лоботряс, сидит у папы на шее, и у него нет денег. И вот моя задача, чтобы код вывел:
Сначала запустим код выше как вы его видите, со старым знакомым self в строке, помеченное тремя !!!.
Вывело
И тут вставляем наше слово static:
.
Задача решена
PS: Если вам действительно интересно, почему нельзя было дублировать код отца в сыновьях, применяя self, то вот ответ. В конструкторе обрабатывается много действий, классов может быть много, и некоторые методы отца могут переопределяться в сыновьях. Поэтому, вроде бы и self нужен, но не совсем self.
Назад в раздел
то ждем ваше обращение в нашей службе тех поддержки.
Различия в static и self для методов класса, простым языком
Не знаю как вы, а я еще с детского садика плохо усваиваю определения, пока они мне не пригодятся в реальной жизни. Так и с ключевым словом static в классах PHP. Фактически, это замена self, появившееся не так давно (или давно) в PHP, за некоторыми исключениями. Но начну я со своей задачи.А задача у меня достаточно хитрая. Представим, что есть класс А, от него наследуется класс Б. И вот хорошо бы, в методе М1 класса Б, вызвать переопределяемый метод М1 родителя А, но с условием, чтобы родитель вызвал метод текущего класса, НО если он есть у пасынка. В ином случае вызывал бы свой метод. Ничего не понятно? Возможно. Но задача для архитектуры оказалась крайне важна, и тут я вспомнил про static, может он мне наконец пригодится.
Я накидал "абстрактные" три класса, чтобы передать суть:
class Father { public static function money() { return __CLASS__.'\'s money'; } public static function life() { return self::money();//!!! } } class Son1 extends Father { public static function money() { return __CLASS__.'\'s money'; } public static function life() { return parent::life(); } } class Son2 extends Father { public static function life() { return parent::life(); } } echo Son1::life(); echo '<br>'; echo Son2::life(); |
Человеческим языком это озвучивается просто. У первого сына есть свои деньги, и в жизни он применяет их. А второй сын лоботряс, сидит у папы на шее, и у него нет денег. И вот моя задача, чтобы код вывел:
Son's money
Father's money |
Вывело
Father's money
Father's money |
class Father { public static function money() { return __CLASS__.'\'s money'; } public static function life() { return static::money();//!!! } } class Son1 extends Father { public static function money() { return __CLASS__.'\'s money'; } public static function life() { return parent::life(); } } class Son2 extends Father { public static function life() { return parent::life(); } } echo Son1::life(); echo '<br>'; echo Son2::life(); |
Задача решена
Son1's money
Father's money |
Назад в раздел
Подписаться на новые материалы раздела: