За последние 24 часа нас посетили 17786 программистов и 1647 роботов. Сейчас ищут 886 программистов ...

instanceof

Тема в разделе "Прочие вопросы по PHP", создана пользователем kostyl, 7 мар 2009.

  1. kostyl

    kostyl Guest

    Добрый день. Подскажите плиз как мне проверить реализует ли класс заданный интерфейс без создания экземпляра класса и если имеется только его имя. Пробывал так:
    PHP:
    1.  
    2. <?php
    3. if ( ((object)$classname) instanceof InterfaceName) {
    4. }
    5. ?>
    6.  
    но чтото не выходит. Наверное я чтото забыл...
     
  2. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  3. kostyl

    kostyl Guest

    Sergey89
    благодарю
     
  4. kostyl

    kostyl Guest

    только чёто я багу в этой функции не понял!!?
    и интерфейсы она не принимает, как я понял...
    ну типа исходный класс должен наследовать класс который реализует интерфейс, но класс, который "сразу" реализует интерфейс дает отрицательный результат...
     
  5. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Можно сделать через рефлексию, но сначала давай разберёмся, почему тебе понадобилось проверять класс, а не объект?
     
  6. kostyl

    kostyl Guest

    Потому, что имеется фабрика классов, в которой описаны имена классов, которые она инстанцирует. + все эти класс должны иметь один общий интерфейс. Если я регистрирую класс который не может реализовать данный интерфейс, мне надо изменять ветку программы, допустим выдавать свое исключение и ловить его гдето, и самое главное, что объект, если он не подходит, не должен быть создан, так как в конструкторе объектов имеются функции изменяющие ход программы... Например, банальное соединение с сервером БД... При этом приходиться разъединять, если класс "не подходит",. Это все время. Так зачем создавать!!! Если можно проверить сразу. Чтото такое. Код писать не буду, думаю, что и так все понятно.
     
  7. kostyl

    kostyl Guest

    а как через рефлексию?
     
  8. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Что значит ты регистрируешь класс, который не может реализовать интерфейс? Почему ты не можешь положиться на фабрику? Покажи пример.

    http://ru2.php.net/manual/en/language.o ... ctionclass
     
  9. kostyl

    kostyl Guest

    Всё, спасибо, нашел:
    PHP:
    1.  
    2. <?php
    3.   $RClass = new ReflectionClass($classname);
    4.   if ($RClass->implementsInterface(interface)) {
    5.   }
    6.