Компьютерная помощь
Сайт комнаты "Компьютерная помощь"

Яшановский Сергей

Дата регистрации: 2016-08-02 15:00:58

Ник: Яшановский Сергей

Комментариев: 4

Skype: sergey_yasha

Дата рождения: 1998-07-06 00:00:00


Комментарии

  • Алгоритм наследования классов на PHP
    2016-08-03 12:25:22

    Спасибо, Вы меня выручаете очень! Редко увидишь сейчас людей, которые бесплатно могут помочь человеку. И у меня, надеюсь, последний вопрос (или утверждение) остался...

    А если у родителя такое же, но публичное (или protected) свойство уже доступно, то создание любого свойства, с таким же доступом или сужающего доступ, чем есть у родительского класса, запрещается.

    А как же переопределение? Если в родителе есть public свойство, а в наследнике тоже такое же public, то свойство переопределится. Правильно ли я понимаю, что при переопределении в object скопируются все свойства с родителя (в соответствии с модификаторами доступа), а затем в объект "наложатся" свойства с дочернего класса. А переопределятся они, если свойства имеют одинаковое имя (естественно) + модификаторы либо такие же (кроме private), либо расширяющие область видимости. А вот с переопределением методов, я так понимаю, по-другому. Тут переопределяются не сами методы, а ссылка на вызов, поскольку методы находятся в коде класса. Я примерно правильно понял ведь? :)

  • Алгоритм наследования классов на PHP
    2016-08-02 16:23:39

    "интерпретатор должен выдать 2, а если с наследника - 3" - стоп. Тогда интерпретатор должен выдать 2 раза двойку, так как public count будет 2 раза подходить по условию (а до private свойства алгоритм и не дойдет). В этом наверно конфликт? Конфликт логики? Но вопрос про переопределение с public на protected остается открытым...Как и те, в принципе, потому что я думаю, что понимаю это неправильно.

  • Алгоритм наследования классов на PHP
    2016-08-02 16:20:40

    "интерпретатор должен выдать 2, а если с наследника - 3" - точнее, наоборот, ведь сначала в массив записываются свойства прототипа, а потом уже наследника. Это выглядит глупо, но работать должно, однако не работает. И да, каким образом переопределяются методы? В них типо ссылка на вызов переопределяется?

  • Алгоритм наследования классов на PHP
    2016-08-02 15:03:08

    Спасибо огромнейшее за статью. Теперь мне почти понятен принцип наследования. Но осталось пару нюансов.

    Рассмотрим код (его мы уже с вами рассматривали ранее в Ответах mail):

    class A {
     public $count = 2;
    }
    class B extends A {
     private $count = 3;
    }

    В таком случае в properties_table объекта будет 2 значения: count и \0B\0 count? Но в примере выше будет ошибка - по какой тогда причине? Ведь, например, при вызове count элементы массива перебираются последовательно. Если, например, вызвать метод, который будет возвращать count (его в коде нет, но представим, что он есть) с родителя - интерпретатор должен выдать 2, а если с наследника - 3. Это по логике статьи. Но такого не будет - интерпретатор даже на этапе построения кода выдаст ошибку. Вообще, я не допонял это из-за того, что я не понимаю до конца смысл переопределения. А в статье про него не написано вроде.

    Вот если в примере выше заменить private на public, то что будет происходить со структурой, что Вы описывали в статье? Тогда сначала в массив properties_table объекта запишется public свойство count, а потом ОНО же переопределится? (т.е. изменится значение, а не добавится аналогичный новый ключ с таким же именем). Если так, то что будет происходить при переопределении protected свойства на public? Оно тоже будет считаться как одно, и переопределится, грубо говоря, область видимости у свойства объекта? Допустим. Но почему тогда нельзя переопределить свойство с public на protected? И вообще, почему нельзя сузить область видимости, а расширить можно? Да как блин происходит это переопределение?)