Обратное назначение в PHP (слева направо) - PullRequest
2 голосов
/ 15 апреля 2011

У меня есть следующее условие:

if (isset($x)){
   $y_class = 'new value';
}else { 
   $z_class = 'new value';
}

Могу ли я изменить вышеуказанное условие if на троичное?Я имею в виду, есть ли способ присвоить LEFT RIGHT ?

Мнимый код:

'new value' = (isset($x)) ? $y_class : $z_class;

Ответы [ 3 ]

7 голосов
/ 15 апреля 2011

Ну, если $y_class и $z_class жестко запрограммированы, вы можете сделать что-то вроде этого, но это только сделает ваш код менее читабельным:

$var = isset($x) ? "y_class" : "z_class";
$$var = 'new value';

И, конечно, это все ещеназначение справа налево;Насколько я знаю, в языке нет такого синтаксиса, который позволял бы присваивание слева направо.

5 голосов
/ 15 апреля 2011

Вы можете сделать это: ${(isset($x)?$y_class:$z_class)} = 'new value';

Обязательная ссылка на документацию php о переменных переменных .

0 голосов
/ 09 августа 2018

Вот самая чистая реализация, которую я мог создать.(По сути, это комбинация из двух лучших ответов).

${(isset($x) ? 'y':'z'). '_class'} = 'new value';

Сначала я подумал использовать языковую конструкцию list(), она не такая маленькая, но я все равно реализовал ее.

list($y_class, $z_class) = isset($x) ? ['new value', $z_class] : [ $y_class, 'new value'];

Если возможно, что $ y_class или $ z_class не установлены, то вам придется выполнить

list($y_class, $z_class) = isset($x) ? ['new value', isset($z_class) ? $z_class : null] : [ isset($y_class) ? $y_class : null, 'new value'];

, оба примера списка приведут к тому, что обеим переменным будет присвоено значение.

...