Добрый день.
Есть одна проблема, первый раз я столкнулся с ней здесь
Как отключить наследование в Doctrine? которая плавно перетекла в эту
Насколько вредно джойнить таблицы где отсутствует информация?
В итоге от наследования пришлось отказаться, но теперь вопрос как редактировать свойства "родительского класса", но при этом запретив напрямую обращаться к этим методам класса (то есть аналог protected).
Я пришёл к такому решению.
Создать в классах "детях" приватное свойство
$accessibleToParent
и расширить эти классы абстрактным классом с одним методом:
<?php
declare(strict_types=1);
namespace App\Model\;
abstract class AccessibleToParent
{
abstract public function isAccessibleToParent(): bool;
}
Теперь, перед тем как вызвать родительские методы в них передаётся класс
AccessibleToParent
и внутри метода проверяется, выставлен ли флаг на переменную
$accessibleToParent
:
public function edit(AccessibleToParent $accessibleToParent, string $name, string $notes, int $blabla): void
{
if(!$accessibleToParent->isAccessibleToParent ()){
throw new \DomainException('You can not do that.');
}
$this->name = $name;
$this->notes = $notes;
//code
}
Выглядит это прямо так дурно пахнущем :).
Вообще какие есть в данной ситуации решения? Я с радостью вернулся бы к наследованиям, но доктрина в своём нынешнем виде не даёт такой возможности, либо я не нашёл решения, которые удовлетворило бы меня.