Добрый день. Вопрос такого рода. Мне необходимо написать класс, который позволил бы избежать многократного прямого вызовова методов. Метод как-бы заранее предопределён, а вот какие классы работают с этим методом, могут быть произвольными. Вместо PHP: echo B::enquqe(); echo C::enquqe(); echo D::enquqe(); echo E::enquqe(); echo F::enquqe(); ... количество классов может быт неограниченным хотелось бы просто echo A::walkAllEnquqe(); здесь он пробегает все классы с методом enquqe. Возможно ли вообще такое в php? Что-то типа: PHP: class AppClass1 { function __constructor() {} } PHP: class CustomClassName extend AppClass1 { static $text = 'Hello!'; static function doSomething() { return self::$text; } } PHP: class AppClass2 extend AppClass1 { function __constructor() { $classes = get_classes_of_child_class_AppClass1(); foreach( $classes as $class ) { $class::doSomething(); } } } PHP: echo new AppClass2(); // output:: Hello! How are you? Скорее всего это какая-то фигня и так не делается. Просто, не у кого спросить, такое реализуемо или нет. Заранее спасибо
Ты сейчас изобретаешь полиморфизм ))) Откажись от static, всего делов. подозреваю, что тебе нужно что-то вроде PHP: if ($object instanceof ParentClass) $object->doIt(); Но да, через $className::method() наверное должно работать. Ну или через call_user_func(), лень проверять. Ты сам пробовал или сразу на форум побежал? --- Добавлено --- Почитай также про get_declared_classes(), instanceof, is_subclass_of() - всё на PHP.NET
Вообще, с PSR это возможно. Можно пробежаться по файлам какого-либо каталога, и преобразовать их имена в классы, потому что там есть простые правила, устанавливающие однозначное соответствие. Я любитель таких трюков. --- Добавлено --- Вот, к примеру, реализация этой идеи. https://packagist.org/packages/haydenpierce/class-finder