2015-05-15 19 views
1

我有一個Json,它包含一些我想自動定義的內容。它正常工作與簡單的"key": "val"語句,但我不能讓它爲eval staments工作:Php:json到常量

$cat test.php 
<?php 

function objDefinition($obj) { 
    foreach ($obj as $key => $val) { 
     $val = $val; 
     \define($key, $val); 
    } } 


$json = \json_decode(\json_encode([ 
'COOKIE_EXP' => "eval('time() + (10 * 365 * 24 * 60 * 60)')", 
])); 

objDefinition($json); 
echo COOKIE_EXP; 

$php test.php 
eval('time() + (10 * 365 * 24 * 60 * 60)') 

我知道eval是邪惡等等,但這種方法將節省我很多的代碼!

謝謝!

+1

json僅適用於靜態值。它不能包含純文本字符串以外的任何其他表達式。所以是的,你可以做到這一點的唯一方法是通過eval() –

+0

你是否得到任何錯誤?你能提供嗎? – taxicala

+0

@MarcB ok,但是'eval'不能正常工作......把'eval'放在$ val裏面,我希望'define'正常工作:相反'COOKIE_EXP'的值是'eval('time() +(10 * 365 * 24 * 60 * 60)')'... – masavini

回答

0

@taxicala

你幾乎得到它:

function objDefinition($obj) 
{ 
    foreach ($obj as $key => $val) { 
     if (strstr($val, 'eval=')) { 
      $val = str_replace('eval=', '', $val); 
      eval("\$val = $val;"); 
     } 
     \define($key, $val); 
    } 
} 


$json = \json_decode(\json_encode([ 
    'COOKIE_EXP' => "eval=time() + (10 * 365 * 24 * 60 * 60)", 
])); 

\objDefinition($json); 
echo COOKIE_EXP; 

謝謝!

0

我想你應該改了一下你的數據結構和你的方法,這樣的事情應該做的伎倆:

function objDefinition($obj) { 
     foreach ($obj as $key => $val) { 
      if (strstr($val, 'eval=')) { 
       \define($key, eval(str_replace('eval=', '', $val))); 
      } else { 
       \define($key, $val); 
      } 
     } 
    } 


    $json = \json_decode(\json_encode([ 
     'COOKIE_EXP' => "eval=time() + (10 * 365 * 24 * 60 * 60)", 
    ])); 
+0

謝謝,但它不起作用:'PHP解析錯誤:語法錯誤,意外結束test.php(10)中的文件:eval()在第1行上的d代碼 – masavini