<MyRusakov.ru />

Профессия Web-разработчик

Профессия Web-разработчик

Этот комплект за 8 месяцев превратит Вас в Web-разработчика с нуля. Учиться достаточно 1 час в день.

Начнёте Вы с HTML, CSS и вёрстки сайтов. Потом перейдёте к программированию и JavaScript. Затем изучите PHP, MySQL, SQL, Python. Изучите Web-фреймворки Laravel и Django. Создадите 5 своих сайтов для портфолио.

Комплект содержит:

- 540 видеоуроков

- 110 часов видео

- 1205 заданий для закрепления материала из уроков

- 5 финальных тестов

- 7 сертификатов

- 12 Бонусных курсов

Подробнее
Подписка

Подпишитесь на мой канал на YouTube, где я регулярно публикую новые видео.

YouTube Подписаться

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Какая тема Вас интересует больше?

Позднее статическое связывание в PHP

Позднее статическое связывание в PHP

Рассмотрим следующий пример:

 <?php

   
class A
   
{
       
// защищенное статическое свойство содержит имя класса
       
protected static $name = "My name A!";

   
       
// просто возвращает имя класса, причем ключевое слово self
       
// будет возвращать свойство $name из того места, где эта
       
// переменная определена изначально
       
public static function getName() {
           
return self::$name;
       
}

       
// эта функция тоже возвращает свойство $name
       
// но уже не из родительского, а из дочерних классов
       
public static function getNameSB() {
           
           
// ключевое слово static
           
return static::$name;
       
}

   
}

   
// класс B наследует свойства и методы класса A
   
// но у себя он переопределяет свойство $name
   
class B extends A {
       
protected static $name = "My name B!";
   
}


   
print A::getName() . PHP_EOL;
   
print B::getName() . PHP_EOL;

   
print A::getNameSB() . PHP_EOL;
   
print B::getNameSB() . PHP_EOL;

Результат выполнения:

 C:\> php php-late-static-binding.php

My name A!
My name A!
My name A!
My name B!

Теперь давайте посмотрим, почему у нас именно такой результат. При первом вызове A::getName() возвращает нам "My name A!", что логично. Вызов B::getName() возвращает тоже самое, хотя мы не этого ожидали. Посмотрим что происходит дальше. Вызов A::getNameSB() возвращает опять тоже значение - и это тоже логично. Но вызов B::getNameSB() возвращает уже "My name B!". Это как раз то, что нам нужно.

Так что же здесь происходит? А вот что: когда мы в методе getNameSB() класса А определяем return static::$name мы говорим компилятору PHP, что нам нужно значение из контекста дочернего класса, а не из контекста родительского. Проще говоря, свойство берется не из того места где оно определено изначально, а из того места где оно переопределено, т.е. из дочернего класса. Вот это как раз и называется поздним статическим связыванием в PHP.

Таким образом, если Вам надо получить статические свойства (методы) из родительского класса для дочернего класса Вам необходимо использовать позднее статическое связывание в PHP, реализуемое посредством ключевого слова static.

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (0):

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.