2013-07-05 2 views
1

Я хотел бы объявить строку, содержащую имя переменной в ней, а затем php сможет идентифицировать эту переменную из строки, как javascript eval. Примеры:php extract имя переменной из строки, вроде javascript eval

Этот код работает, потому что значение $ value - это то, что заканчивается в строке, а не «$ value».

$value="some value"; 
$str="the value is $value"; 
echo $str; 
//the value is some value 

Но я хотел бы эту функциональность:

$str2="the new value is $newValue"; 
$newValue="something new"; 
echo $str2; 
//the new value is something new 

Конечно, это не работает в PHP, потому что $ новое_значение не существует, когда $ str2 был назначен. Есть ли в любом случае для php, чтобы сделать это, чтобы иметь возможность получить имя переменной из строки, а затем получить значение этой переменной? Думаю, это похоже на javascript eval. Спасибо за прочтение!

Использование: Я строю html-блоки внутри цикла foreach. он петли через массив, поэтому информация внутри цикла является ключом и значением каждого элемента массива. Я пишу метод для объекта формы, который позволяет пользователю указывать элементы входного блока. некоторые из этих элементов хотели бы получить доступ к ключу, а некоторые хотели бы получить доступ к значению. так, например

foreach($cars as $key=>$car) 
{ 
echo "<input id='text$key' type='text' value='".$car["model"]."'><br> 
\n<input value='choice$key' type='button' value='".$car["make"]."'> 
<br><br>\n\n"; 
} 

даст что-то вроде

<input id="text0" type="text" value="Malibu"><br> 
<input id="choice0" type="button" value="Chevy"><br><br> 

<input id="text1" type="text" value="Escort"><br> 
<input id="choice1" type="button" value="Ford"><br><br> 

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

function makeCarForm($formString) 
{ 
foreach($cars as $key=>$car) 
{ 
echo $formString; 
} 
} 

, а затем моя строка

$theFormString="<input id='text$key' type='text' value='".$car["model"]."'><br> 
\n<input value='choice$key' type='button' value='".$car["make"]."'> 
<br><br>\n\n"; 

, так что я мог бы вызвать функцию как

makeCarForm($theFormString); 

и даст тот же вывод HTML, как описано выше. Имеет ли это смысл? Неужели я ошибаюсь?

+0

Не проще ли сборка строк? ['sprintf()'] (http://php.net/sprintf) – BlitZ

+0

Какой прецедент? И нет, если у вас есть результат строки из выражения интерполяции, вы не можете получить предыдущее состояние или имя переменной. Вместо этого используйте схему замещения в стиле printf. Или поиск подстроки, или все, что вы просите. – mario

+0

Я добавил кейс. – chiliNUT

ответ

2

Рекомендуется, чтобы вы не использовали eval. Раньше я использовал eval только для ситуации, когда мне приходилось строить динамическую логическую логику. если вы его должны использовать, вы можете следовать приведенным ниже инструкциям.

$string = '$val = "FooBar"; $out = "This is my string $val";'; //when a variable is placed inside single quotes it will not expand. 
eval($string); 
echo $out; 

Повторное использование eval не рекомендуется. Это чисто для образовательной цели.

+0

Это делает то, что мне нужно, но я ценю, что eval не самый безопасный метод для использования , – chiliNUT

2

Что касается объявления переменных, то нет. Но если вы хотите сохранить этот дизайн, это возможно с функциями.

$str2="the new value is ".newValue(); 
function newValue() 
{ 
    return 'something new'; 
} 

echo $str2; 
Смежные вопросы