三元运算符语法(PHP)

4

我刚刚学习了三目运算符,并期望以下代码可以正常工作:

$dbh =new PDO('mysql:blad','user','pass');
(!$dbh) ? throw new Exception('Error connecting to database'); : return $dbh; 

但是我收到了以下错误信息:

parse error: syntax error, unexpected T_THROW in...

有正确的语法建议吗?

谢谢


5
请不要采用捷径缩短算法的关键部分,这是一个好的编程实践。在日后阅读代码时,这样做会增加理解算法的难度。https://gist.github.com/00ca02f7c86f6aac2e52 - SamT
2
三元运算符的目的是为“如果某事则分配某个值,否则分配另一个值”提供一种简写方式。如果您只想在几个任意语句之间执行if/else,则请使用适当的if else。 - Quentin
2个回答

12
三元运算符的语法是expr1 ? expr2 : expr3。简单来说,表达式是指“任何具有值的东西”
在PHP 8之前的版本中,throw …return …不是表达式,而是语句。这意味着它们不能用作三元操作的操作数。
从PHP 8开始,throw ...是一个表达式,因此可以用作三元操作的操作数,而return ...仍然是一条语句。
无论如何,如果构造函数存在问题,PDO类将抛出自己的异常。正确(即非破损)的语法应该像这样:
try {
    $dbh = new PDO('mysql:blad','user','pass');
    return $dbh;
} catch (PDOException $e) {
    throw new Exception('Error connecting to database');
}

-3
也许不需要分号,因为三元运算符完整的被视为一个命令,你必须以分号结束它:
(!$dbh) ? throw new Exception('Error connecting to database') : return $dbh;  

所以不要在命令中间结束 :)


谢谢大家的反馈,我只是想确认这不是语法问题。 - rix

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接