Добрый день. Подскажите плиз как мне проверить реализует ли класс заданный интерфейс без создания экземпляра класса и если имеется только его имя. Пробывал так: PHP: <?php if ( ((object)$classname) instanceof InterfaceName) { } ?> но чтото не выходит. Наверное я чтото забыл...
только чёто я багу в этой функции не понял!!? и интерфейсы она не принимает, как я понял... ну типа исходный класс должен наследовать класс который реализует интерфейс, но класс, который "сразу" реализует интерфейс дает отрицательный результат...
Можно сделать через рефлексию, но сначала давай разберёмся, почему тебе понадобилось проверять класс, а не объект?
Потому, что имеется фабрика классов, в которой описаны имена классов, которые она инстанцирует. + все эти класс должны иметь один общий интерфейс. Если я регистрирую класс который не может реализовать данный интерфейс, мне надо изменять ветку программы, допустим выдавать свое исключение и ловить его гдето, и самое главное, что объект, если он не подходит, не должен быть создан, так как в конструкторе объектов имеются функции изменяющие ход программы... Например, банальное соединение с сервером БД... При этом приходиться разъединять, если класс "не подходит",. Это все время. Так зачем создавать!!! Если можно проверить сразу. Чтото такое. Код писать не буду, думаю, что и так все понятно.
Что значит ты регистрируешь класс, который не может реализовать интерфейс? Почему ты не можешь положиться на фабрику? Покажи пример. http://ru2.php.net/manual/en/language.o ... ctionclass
Всё, спасибо, нашел: PHP: <?php $RClass = new ReflectionClass($classname); if ($RClass->implementsInterface(interface)) { }