2010-05-22 6 views
0

Почему эта работа:Динамические переменные в функциях

function myfunction($v) { 
    $query = $v['host'] == '1'; 
    return ($query); 
} 

$output = array_filter($recordset,myfunction); 
print_r($output); 

В то время как этого сценария, который пытается сделать то же самое с переменными, не?

$column1 = 'host'; 
$value1 = 1; 
$query1 = '$v[\''.$column1.'\'] == '.$value1; 

function myfunction($v) { 
    $query = $GLOBALS['query1']; 
    return ($query); 
} 

$output = array_filter($recordset,myfunction); 
print_r($output); 

Любая помощь будет замечательной. Благодаря!

ответ

1

В заявлении $query = $v['host'] == '1'; не установлено $query выражением $v['host'] == '1'. Это оценивает$v['host'] == '1' и устанавливает $query к значению выражения, которое равно 1 или 0, в зависимости от того, $v['host'] равно '1'.

$output = array_filter($recordset,myfunction); работает, потому что array_filter предназначен для использования пользовательской функции обратного вызова PHP для своего второго аргумента.

Динамическое кодирование действительно доступно только на PHP с использованием функции eval (очень опасно!) Или с использованием объектно-ориентированной структуры с object overloading.

+0

Спасибо, это отличное объяснение – Ryan

-1

Можете ли вы использовать глобальные $ query1?

+0

Это не работает. Когда я заменил $ query = $ GLOBALS ['query1']; с $ query = $ query1; сценарий полностью перестает работать. – Ryan

+1

Затем напишите 'global $ query1' в начале функции. –

Смежные вопросы