За последние 24 часа нас посетили 55002 программиста и 1721 робот. Сейчас ищут 1904 программиста ...

доступ к неймспейсам через eval

Тема в разделе "Прочие вопросы по PHP", создана пользователем 3Dinterface, 22 июл 2012.

  1. 3Dinterface

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

    С нами с:
    2 фев 2012
    Сообщения:
    13
    Симпатии:
    0
    привет
    почему неработает вот такая замечательная строка

    Код (Text):
    1.  
    2. eval ("use modules\test as modules;");
    может дело в символе "\" ???
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    \t - это табуляция
     
  3. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    а ' ' где?
     
  4. 3Dinterface

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

    С нами с:
    2 фев 2012
    Сообщения:
    13
    Симпатии:
    0
    мда вот такая трабла
    есть рабочая фигня
    Код (Text):
    1. use modules\base\controllers\test as contr;
    мне надо чтобы это работало вот так
    Код (Text):
    1. $work="test";
    2. use modules\base\controllers\$work as contr;
    но так как переменнуб в namespace я не могу засунуть то пытаюсь сделать через eval
    Код (Text):
    1. $work="test";
    2. eval ('use modules\base\controllers\'+$work' as contr;');
    Добавлено спустя 4 минуты 53 секунды:
    Код (Text):
    1.  
    2. $test="test";
    3. eval ('use modules\base\controllers\\'.$test.'as contr2;');
    4. contr2\index();
    но получаю
    Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in Z:\home\experements.ru\www\procedure\index.php(15) : eval()'d code on line 1
    Fatal error: Call to undefined function contr2\index() in Z:\home\experements.ru\www\procedure\index.php on line 16

    Добавлено спустя 34 минуты 8 секунд:
    Код (Text):
    1. $test="test";
    2. $t='use modules\base\controllers\\'.$test.' as contr2;';
    3. echo '<br/>'.$t;
    4. eval ($t);
    5. contr2\index();
    результат
    use modules\base\controllers\test as contr2;
    Fatal error: Call to undefined function foo\contr2\index() in Z:\home\experements.ru\www\procedure\index.php on line 18
     
  5. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Ерунду какую-то пишите.
    Пример на сайте php.net, там все обусловлено и показано, неужели и там не ясно выражаются?

    Вы хоть понимаете, что выполняет eval?
    Вы пытаетесь в нее совать код, не зная как работает функция?

    Вам не кажется это странным?


    php.net/manual/ru/function.eval.php
     
  6. 3Dinterface

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

    С нами с:
    2 фев 2012
    Сообщения:
    13
    Симпатии:
    0
    Да нет. Всё логично.
    паттерн MVC
    взависимости от параметров гет подключается один из множества контролёров
    каждый контролёр заключён в свой собственный namespace
    фронт контролёр вазывает несколько методов(проверку доступа и action) в контролёре.
    просто написать use я не могу так как контролёры различны то и функции надо вызывать в различных наймспейсах.

    Поэтому я и пытался динамически формировать alias на нэймспейс, и вызывать методы у алиаса.

    спасибо хотябы за попытку помоч, задача решена обращением к функции напрямую без alias.
    Код (Text):
    1.  
    2. //пример динамического формирования пути к функции
    3. $func="models\\".$_GET["moduls"]."\\controllers\\test\\index";
    4. $func();