странное поведение с защищенными статическими свойствами и наследованием в переполнении стека

У меня проблема со статическими членами и наследованием в php

Почему это работает:

class A {
public static function me() {
echo static::$b;
}
}

class B extends A
{
protected static $b = "hello";
}
B::me();

и это не ??????????:

class A {
public static function me() {
echo static::$b;
}
}

class B extends A
{
private static $b = "hello";
}
B::me();

Я понимаю, что я имею в виду переменную $ b из контекста A
но почему я могу получить доступ к защищенному члену, а не к частному?
Спасибо.

-1

Решение

Посмотрите. private предназначен только для самого класса, в то время как protected для семьи. Не удивительно, что $ b не доступен в A, если вы объявите это private для B, независимо от того, B наследуется от A. С другой стороны, если вы объявите это protected, A также может получить к нему доступ, потому что он принадлежит семье B.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]