Несколько присвоений одной и той же переменной - PullRequest
4 голосов
/ 25 января 2012

Почему я получаю ошибку разбора с этим кодом:

$func = "do_{$something}" = $func();

Это должно быть правильно, потому что

$func = "do_{$something}";
$func = $func();

работает ...

Ответы [ 3 ]

6 голосов
/ 25 января 2012

Поскольку назначение работает справа налево .

Посмотрите на этот код в качестве примера:

$a = $b = 3;

Если назначение будет работать слева, это будет проанализировано как:

$a = $b;
$b = 3;

, который может привести к неопределенной переменной.

Вместо этого он анализируется как:

$b = 3;
$a = $b;
5 голосов
/ 25 января 2012

То, что вы пытаетесь сделать, эквивалентно следующему:

"do_{$something}" = $func();
$func = "do_{$something}";

Что, очевидно, имеет синтаксические ошибки.Ваш второй блок кода плохо читается, так как вы перезаписываете переменную имени функции результатом вызова функции.Более чистый способ сделать это будет:

$result = call_user_func('do_' . $something);
3 голосов
/ 25 января 2012

Недопустимо, потому что оператор = является ассоциативным справа . Это означает, что самый правый = выполняется первым, поэтому ваш код фактически эквивалентен следующему:

"do_{$something}" = $func();
$func = "do_{$something}";
...