За последние 24 часа нас посетили 45250 программистов и 3276 роботов. Сейчас ищут 1602 программиста ...

Сформировать имя абстрактрого класса и обратиться к нему ?

Тема в разделе "PHP для новичков", создана пользователем NR55RU, 7 апр 2011.

  1. NR55RU

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

    С нами с:
    16 фев 2011
    Сообщения:
    88
    Симпатии:
    0
    Вопрос писать даже стыдно ибо простой но я уже все методы перепробовал и туплю :)

    предположим есть строка
    PHP:
    1.  
    2. $obj = Class::getObj();
    3.  
    Так вот вопрос в том как мне формировать имя класса динамически и что бы обращение к классу выполнялось.
    В лучшем случае я получал в переменной $obj строку причем правильно сформированную но всего лишь строку а не результат работы класса в худшем ошибки.
     
  2. admyx

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

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Привожу кусок кода

    PHP:
    1. <?php
    2.  
    3. $controller = 'Controller'.ucfirst($moduleData['class']);
    4.         $action = $controller.'::'.$moduleData['action'];
    5.         $perms = empty($moduleData['permissions'])?'root':$moduleData['permissions'];
    6.            
    7.         //check method accessibility
    8.         if(!class_exists($controller) || !method_exists($controller, $moduleData['action']) || !is_callable(array($controller, $moduleData['action'])))
    9.             parent::doRedirect('onmain', true);
    10.  
    11.         //check permissions and run module
    12.         $this->runModule($controller::$moduleData['action'](), $this->checkAccess($perms));
     
  3. NR55RU

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

    С нами с:
    16 фев 2011
    Сообщения:
    88
    Симпатии:
    0
    Так я тоже побывал но не выходит, не знаю почему

    PHP:
    1.  
    2. $var = 'Class';
    3. $var2 = 'getObj';
    4. $obj = $var.'::'.$var2();
    5.  
    Выдает: Fatal error: Call to undefined function getObj()

    Если делать так:
    PHP:
    1.  
    2. $obj = $var::$var2();
    3.  
    То выдает другую ошибку
    Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM

    Если просто руками пропишу к прмиеру Class::getObj() все работает на ура.
    Не могу вкурить в чем проблема.
     
  4. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
  5. admyx

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

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    Действительно, а какая версию?
    p.s. у меня 5.3
     
  6. NR55RU

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

    С нами с:
    16 фев 2011
    Сообщения:
    88
    Симпатии:
    0
    О да БИГ спасибо, заработало и заодно узнал о существовании такой функции.
    А то я думал что я совсем торможу :)
    PHP:
    1.  
    2. <?php
    3. $obj = call_user_func_array($var.'::getObj', array($value1, $value2)); // Даже с передачей параметров
    4. ?>
    5.  
    У меня на хостинге ПХП версии PHP 5.2.10 (свежее пока не дают). Видимо посему и не работало как должно было.
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    NR55RU
    У меня на хостинге ПХП версии PHP 5.2.10 (свежее пока не дают)
    не понимаю я такого поведения. Что значит "не дают"? Почему ты еще с ними? Я не понимаю вобще что такое "не дают" если деньги платишь ты. Ты за то и платишь, чтобы давали. И даже брали. И даже без вазилина. =) Работа у них такая, они сами на ее подвизались. Вали от них. Они дубы.
     
  8. admyx

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

    С нами с:
    14 мар 2008
    Сообщения:
    2.159
    Симпатии:
    1
    igordata
    Гвоздь, а 5.2. поддерживает $varOne::$varSecond() ?
     
  9. Apple

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

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Я напоролся на это в Доктрине, когда класс тебе возвращает имя модели, к которой надо обратиться как:
    Класс::строка_с_именем_модели();

    Кто-то под РНР 5.3 переписал, у меня на компе работало, а в самый необходимый день на хостинге оно сломалось.
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    admyx
    нэ знаю. я знаю что в пхп 5.3 появился могучий фетч_аррей_олл и этого достаточно чтобы перейти на эту версию :D