идентифицировать и выполнить php-код в строке

Я хотел бы знать, можно ли выполнить PHP-код в строке. Я имею в виду, если у меня есть:

$string = If i say <?php echo 'lala';?> I wanna get "<?php echo 'dada'; ?>"; 

Кто-нибудь знает, как это сделать?

[EDIT] Похоже, никто не понял. Я хочу сохранить строку как

 $string = If i say <?php count(array('lala'));?> 

в базе данных, а затем визуализируйте его. Я могу это сделать, используя

 function render_php($string){ ob_start(); eval('?>' . $string); $string = ob_get_contents(); ob_end_clean(); return $string; } 

Проблема в том, что я не пересобираю php-код в "" (кавычки), например

 I say "<?php echo 'dada'; ?>" 

 $string = ($test === TRUE) ? 'lala' : 'falala'; 

Есть много способов сделать то, что кажется, как вы пытаетесь сделать (если я читаю то, что вы написали правильно). Вышеупомянутое является тройным. Если условие оценивается как true, то $ string будет установлено в 'lala', иначе установленном на 'falala'.

Если вы буквально спрашиваете, что вы написали, используйте функцию eval (). Он принимает переданную строку и выполняет ее, как если бы это был php-код. Не включайте теги <?php ?> .

 function dropAllTables() { // drop all tables in db } $string = 'dropAllTables();'; eval($string); // will execute the dropAllTables() function 

[редактировать]

Вы можете использовать следующее регулярное выражение, чтобы найти все PHP-код:

 preg_match_all('/(<\?php )(.+?)( \?>)/', $string, $php_code, PREG_OFFSET_CAPTURE); 

$ php_code будет массивом, где $ php_code [0] вернет массив всех совпадений с тегами code + <?php ?> . $ php_code [2] будет массивом с только кодом для выполнения.

Так,

 $string = "array has <?php count(array('lala')); ?> 1 member <?php count(array('falala')); ?>"; preg_match_all('/(<\?php )(.+?)( \?>)/', $string, $php_code, PREG_OFFSET_CAPTURE); echo $php_code[0][0][0]; // <?php count(array('lala')); ?> echo $php_code[2][0][0]; // count(array('lala')); 

Это должно быть полезно для того, что вы хотите сделать.

Похоже, вы пытаетесь объединиться. Используйте оператор конкатенации "."

 $string = "if i say " . $lala . " I wanna get " . $dada; 

или

 $string = "if i say {$lala} I wanna get {$dada}."; 

Это то, что я получаю, так как ваша строка выглядит как переменная php.

EDIT: <?php ?> Используется, когда вы хотите сообщить интерпретатору PHP, что код в этих скобках следует интерпретировать как PHP. При работе в этих скобках PHP вам не нужно включать их снова. Так как вы просто сделаете это:

 // You create a string: $myString = "This is my string."; // You decide you want to add something to it. $myString .= getMyNameFunction(); // not $myString .= <?php getMyNameFunction() ?>; 

Строка создается, затем к ней добавляются результаты getMyNameFunction (). Теперь, если вы указали переменную $ myString в верхней части страницы и захотели ее использовать позже, вы сделаете следующее:

 <span id="myString"><?php echo $myString; ?></span> 

Это позволит интерпретатору добавить содержимое переменной $ myString между тегами.

Используйте token_get_all() в строке, затем T_OPEN_TAG токен T_OPEN_TAG , начните копирование оттуда, T_CLOSE_TAG токен T_CLOSE_TAG и остановите его. Строка между токеном рядом с T_OPEN_TAG и до тех пор, пока токен T_CLOSE_TAG станет вашим PHP-кодом.

Это быстро и не может потерпеть неудачу, поскольку он использует токенизатор PHP для синтаксического анализа строки. Вы всегда найдете биты кода PHP внутри строки, даже если строка содержит комментарии или другие строки, которые могут содержать ?> Или любые другие связанные подстроки, которые будут путать регулярные выражения или рукописный, медленный, чистый парсер PHP.

Я бы предпочел не хранить ваши блоки кода PHP в базе данных и оценивать их с помощью eval. Как правило, лучшее решение. Читайте о Design Pattern, ООП, полиморфизме.

Вы можете использовать функцию eval () .