Наследование PHP от прародителя - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь понять, как наследование PHP работает в терминах «защищенной статической функции».

Скажем, у нас есть 3 класса (A, B, C), где C наследуется от B, а B от A:

class A{
    # ... properties & methods
    # then we have targetFunc()
    protected static function grandparentFn(){
        // some action
    }
}
class B extends A{
    protected static function parentFn(){
        // some action
    }
}
class C extends B{

}

Когда я делаю:

C::parentFn() // it fails .... (expected, due to protected)

Тогда, когда я делаю:

C::grandparentFn() // it works .... ????

Разве grandparentFn() не защищен?Почему это доступно, как описано выше?Даже для статического метода, как здесь применяется видимость?

Ответы [ 2 ]

1 голос
/ 08 апреля 2019

Это не будет работать. Члены, объявленные защищенными, могут быть доступны только внутри самого класса, а также наследовать и родительские классы. Это относится и к статическим защищенным методам.

Поэтому, когда вы хотите получить доступ к статическому защищенному методу, вы можете сделать это только внутри класса, родительского класса или дочернего класса.

https://www.php.net/manual/en/language.oop5.visibility.php

0 голосов
/ 08 апреля 2019

Это не сработает: Call to protected method A::grandparentFn() from context '' in [...][...]:18

Пример можно найти здесь: http://sandbox.onlinephpfunctions.com/code/dc1750647f242840ef9a3606692ddaef8e906648

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...