2015-05-15 4 views
1

У меня есть Json, который содержит несколько континтов, которые я бы хотел автоопределить. Он отлично работает с простыми "key": "val" заявления, но я не могу заставить его работать на eval staments:Php: json to константы

$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 Parse error: синтаксическая ошибка, неожиданный конец файла в test.php (10): eval() 'd код в строке 1' – masavini