Является ли отслеживание родительских полей в PHP строго неверным?

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

РИСУНОК 1

class A {
protected $x;

function f() {
return $this->x;
}
}

class B extends A {
protected $x = 'foo';
}

(new B)->f(); // 'foo'

Затенение используется здесь, чтобы воспользоваться преимуществами инициализации поля PHP. Тем не менее, некоторые линтеры, такие как Php Inspections (EA Extended) предупредите, что это неправильно, и вместо этого порекомендуйте использовать конструктор для инициализации поля, как показано на фиг.2.

Фиг 2

class A {
protected $x;

function f() {
return $this->x;
}
}

class B extends A {
function __construct() {
$this->x = 'foo';
}
}

(new B)->f(); // 'foo'

Переписав реализацию B чтобы использовать инициализацию конструктора, нам вообще не нужно использовать теневое копирование.

Является ли слежка строго неправильной? Если нет, когда следует разрешать слежку?

2

Решение

Редактировать: онлайн документация для проверки: https://github.com/kalessil/phpinspectionsea/blob/master/docs/architecture.md#class-overrides-a-field-of-a-parent-class

Обратная связь приветствуется.

0

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

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

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