
![]() |
Здравствуйте Гость ( Вход | Регистрация ) |
|
|
|
![]() ![]() ![]() |
![]() |
۩
Дата
|
![]() Жадный квантификатор ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Эксперт ![]() Сообщений: 6158 Пользователь №: 4795 На форуме: Карма: 120 ![]() |
Привет всем!
Вопрос на засыпку - почему это работает (отдаёт protected B)?) https://onlinephp.io/c/6426c <?php |
![]() |
۩
Дата
|
![]() Жадный квантификатор ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Эксперт ![]() Сообщений: 6158 Пользователь №: 4795 На форуме: Карма: 120 ![]() |
Сам себе отвечу.
https://github.com/php/php-src/pull/2388 > I'm afraid that this bug has existed so long that it turned into a feature. I'm pretty apprehensive about making such a major change to visibility handling. Отлично.. ООП, говорили они.. Инкапсуляция! - кричали они... |
![]() Пользователь ![]() ![]() Профиль Группа: Пользователь Сообщений: 54 Пользователь №: 46417 На форуме: Карма: ![]() |
бред, конечно, из конструктора, мол, методы класса доступны ( хз
|
![]() |
|
![]() ![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Эксперт ![]() Сообщений: 6347 Пользователь №: 18498 На форуме: Карма: 269 ![]() |
Это ж всегда так было, вот в доках. Раздел "Видимость из других объектов"
Меня более удивляет что родитель видит внутряки потомков. class A -------------------- There never was a struggle in the soul of a good man that was not hard
|
![]() |
|||
![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 267 Пользователь №: 43211 На форуме: Карма: 3 ![]() |
Вы же сами передаете экземпляру A экземпляр B и вызываете метод B. |
||
![]() |
|||
![]() ![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Эксперт ![]() Сообщений: 6347 Пользователь №: 18498 На форуме: Карма: 269 ![]() |
защищенный метод, о котором, по идее, A не должен знать -------------------- There never was a struggle in the soul of a good man that was not hard
|
||
![]() |
|||
![]() Здесь живет ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Форумчанин ![]() Сообщений: 267 Пользователь №: 43211 На форуме: Карма: 3 ![]() |
От наследников/родителей protected не защищает. Для этого есть private ![]() |
||
![]() |
۩
Дата
|
||||||
![]() Жадный квантификатор ![]() ![]() ![]() ![]() ![]() ![]() Профиль Группа: Эксперт ![]() Сообщений: 6158 Пользователь №: 4795 На форуме: Карма: 120 ![]() |
В доке как раз про "объекты одного и того же типа" и это честно, т.к. о реализации мы знаем из контекста такого же класса в котором работаем.
Ох.. вот это тоже бага. Ну не может родитель знать о реализации своих предков. Предки про родителя - ещё куда ни шло.
Как раз protected должен защищать от неконтекстных вызовов, например: - дочерние классы знают про protected методы родительских, т.к. унаследованы - родительский класс не должен ничего знать о дочерних реализациях, ибо это нарушает идею наследования Private немного про другое, он не позволяет знать предкам про какие-то родительские методы/свойства. |
||||||
![]() Unregistered ![]() |
попробуйте вместо экз. класса А проделать эту работу ручным способом, т.е.
вы получите то же самое, т.е. php работает правильно, как видно и задумали арх. Экземпляр класса кот. родитель не видит ничего в своем потомке, он работает с переданным экз. класса В, из которого и возвращается результат через посредника, т .е. через экз. класса А |
||
|
![]() |
![]() ![]() ![]() |