<MyRusakov.ru />

Создание крупного проекта на Java с нуля

Создание крупного проекта на Java с нуля

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

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

В рамках упражнений курса Вы параллельно со мной будете создавать свою большую программу на Java, что даст Вам необходимую практику, после которой для Вас уже не будет разницы, какого размера создавать программы.

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

Подписавшись по 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):

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