Php 通过引用和三元运算符分配变量?

Php 通过引用和三元运算符分配变量?,php,reference,pass-by-reference,ternary-operator,Php,Reference,Pass By Reference,Ternary Operator,为什么三元运算符不适用于按引用赋值 $obj = new stdClass(); // Object to add $result = true; // Op result $success = array(); // Destination array for success $errors = array(); // Destination array for errors // Working $target = &$success; if(!$result) $ta

为什么三元运算符不适用于按引用赋值

$obj     = new stdClass(); // Object to add
$result  = true; // Op result
$success = array(); // Destination array for success
$errors  = array(); // Destination array for errors

// Working
$target = &$success;
if(!$result) $target = &errors;
array_push($target, $obj);

// Not working
$target = $result ? &$success : &$errors;
array_push($target, $obj);
给你

$target = ($result ? &$success : &$errors);
您的示例还有两个输入错误


编辑

注意:请注意,三元运算符是一个表达式,它的计算结果不是变量,而是表达式的结果。了解是否要通过引用返回变量很重要。语句返回$var==42$a:$b;在这种情况下,通过引用返回函数将不起作用,并且在以后的PHP版本中会发出警告

idk,如果这以前有效,但现在不再有效了。如果不想使用if语句,请尝试以下操作:

$result ? $target = &$success : $target = &$errors;
或者在分开的行上

$result 
  ? $target = &$success 
  : $target = &$errors;

你能更好地解释你的答案吗?我说的是为什么我不得不使用括号和打字错误。谢谢你的时间,伙计。因为它在执行导致错误的条件之前将$result分配给$target。因此,要解决这个问题,您可以将其设置为通过将其括在括号中来分配条件的结果。@iim.hlk:有关解决方法,请参阅。上述语法可能仅在旧版本的PHP中受支持。@jmikola oh!,我想[这个评论][1]回答了这个问题。[1]: