Есть интерфейс
interface TestInterface {
public function test();
public function test2();
}
Есть несколько родительских классов
class ParentClass1 implements TestInterface {
public $child = false;
public function test() {
if (!$this->child) {
return 'fail';
}
echo 'test1';
}
public function test2() {
echo 'test2';
}
}
class ParentClass2 implements TestInterface {
public $child = false;
public function test() {
if (!$this->child) {
return 'fail';
}
echo 'test2';
}
public function test2() {
echo 'test2';
}
}
И есть рандомные наследуемые классы
class ChildClass1 extends ParentClass1 {
public $child = 1;
}
class ChildClass2 extends ParentClass2 {
public $child = 2;
}
Сам по себе родительский класс может быть создан (не абстрактный), и может быть вызван метод test2. Чтоб разрешить выполнение метода test только для дочерних элементов, приходится в каждый родительский класс вставлять этот костыль
if (!$this->child) {
return 'fail';
}
В приложении естественно, подобных классов гораздо больше чем 2, приходится повторять один и тот же костыль в многих классах. Была мысль, сделать общую абстракцию для всех родительских классов, реализовать в нёй метод __call, сделать методы protected, и отлавливать вызовы методов. Но php ругается (т.к. интерфейс, а значит только public). Есть какие либо идеи, как отлавливать вызовы методов другим способом ?
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости