我有一個字符串,我想PHP閱讀爲一段代碼。原因是我想提前爲PHP創建一組指令,然後再執行它。目前,我有:評估一個字符串爲PHP代碼?
$string = '$this->model_db->get_results()';
和期望的結果是:
$string2 = $this->model_db->get_results();
我有一個字符串,我想PHP閱讀爲一段代碼。原因是我想提前爲PHP創建一組指令,然後再執行它。目前,我有:評估一個字符串爲PHP代碼?
$string = '$this->model_db->get_results()';
和期望的結果是:
$string2 = $this->model_db->get_results();
你可以有一個變量變量/函數,但不能有變量方法鏈。您可以使用變量變量/函數創建一個方法鏈。
選中此頁面中的PHP文件: http://php.net/manual/en/language.variables.variable.php
它顯示了使用字符串作爲對象或方法名稱的使用。使用eval可能會導致安全漏洞,具體取決於您的數據來源。
$var1 = 'model_db';
$var2 = 'get_results';
$this->$var1->$var2();
雖然說實話,但如果不使用上述方法,可能會有更好的解決方案。 – dqhendricks 2012-03-22 22:27:30
我打算剔除這個,看起來更簡單,可能更有效。感謝這兩個建議。 – Malcr001 2012-03-22 22:28:54
http://php.net/manual/en/function.eval.php
<?php
$string = 'cup';
$name = 'coffee';
$str = 'This is a $string with my $name in it.';
echo $str. "\n";
eval("\$str = \"$str\";");
echo $str. "\n";
?>
或者在你的情況下:
<?php
$string = "\$string2 = \$this->model_db->get_results();";
// ... later ...
eval($string);
// Now $string2 is equal to $this->model_db->get_results()
?>
不...不要使用評估這個... – dqhendricks 2012-03-22 22:16:52
埃瓦爾爲我工作。 dqhendricks你建議什麼呢? – Malcr001 2012-03-22 22:21:25
@ user971824是的,eval的作品,但不好的做法。看到我的答案替代。 – dqhendricks 2012-03-22 22:26:09
這聽起來像你想PHP的eval function,其執行包含PHP代碼的字符串。例如:
// Now
$get_results = '$this->model_db->get_results(' . intval($id) . ');';
// Later
eval($get_results);
然而,EVAL通常是一個壞主意。也就是說,有很多方法可以處理您可能會想到的與eval
有關的事情。
在上面的示例中,您必須確保$this
在調用eval
的代碼中。這意味着,如果你在代碼中的一個完全不同的部分儘量eval($get_results)
,你可能會得到約$this
或$this->model_db
不存在錯誤。
更健壯的替代方案是創建一個anonymous function(可在PHP 5.3及以上):
// Now
$that = $this;
$get_results = function() use ($that, $id) {
return $that->model_db->get_results($id);
};
// Later
call_user_func($get_results);
但如果$this
是現在沒空?很簡單:讓一個函數參數:
// Now
$get_results = function($that) use ($id) {
return $that->model_db->get_results($id);
};
// Later
call_user_func($get_results, $this);
如果'eval'爲你的任務的解決方案 - 你肯定錯了 – zerkms 2012-03-22 22:24:18
您正在使用什麼版本的PHP做什麼? – 2012-03-22 22:31:34