2013-08-09 4 views
0

Я имею в виду, у меня есть строка: "class cl{...}", и я хотел бы включить ее. Я знаю, что есть функция eval, но это лучший способ сделать это?Можно ли включить строку?

+1

Не делайте этого! Эваль - это зло, и каждая функция (если таковая существует) обеспечивает аналогичную функцию и зло. – urzeit

+9

Почему это определение класса в строке? – Jon

+6

Я не могу придумать ни одной причины для этого. Не могли бы вы просветить меня? – vascowhite

ответ

2

Это зависит от того, почему у вас есть это как строка. От куда это?

Если пользователь создан, то есть пользовательский ввод, лучше не передавать его через eval. Пользователь может легко запускать любой код на вашем сайте!

Если вы прочитали это из файла и знаете, что это законно, просто используйте include в этом файле. Но вы также можете использовать eval. Просто важно, чтобы эта строка не была создана пользователем!

1

Ok можно использовать call_user_func динамически называть объект

namespace Foobar; 

class Foo { 
    static public function test() { 
     print "Hello world!\n"; 
    } 
} 

call_user_func(__NAMESPACE__ .'\Foo::test'); // As of PHP 5.3.0 
call_user_func(array(__NAMESPACE__ .'\Foo', 'test')); // As of PHP 5.3.0 

В вашем случае:

$obj = '\Foo'; 
$method = 'test'; 
call_user_func(array(__NAMESPACE__ .$obj, $method)); 
1

Это своего рода обычаем для пользователей PHP, чтобы задать этот вид вопросов: разработать некоторые необычные и ненадежный механизм, затем застрял с ним, а затем перейдите в Stack Overflow с вопросом. И у нас есть типичный XY problem с запахом неуверенности. И вонючий ответ, так как SO строго прямо в его ответах.

Почему вы должны иметь это с ног на голову: сначала задайте вопрос, а затем получите правильное решение для вашей реальной проблемы.