三元运算符语法(PHP)


Ternary operator syntax (PHP)

刚刚学习了三元运算符,并期望以下内容起作用:

$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...

对正确的语法有什么想法吗?

感谢

三元运算符的语法为expr1 ? expr2 : expr3。简洁地说,一个表达式是"任何有价值的东西"。

对于PHP8之前的PHP版本,throw …return …不是表达式,而是语句。这意味着它们不能用作三元运算的操作数。

在PHP8中,throw ...是一个表达式,因此可以用作三元运算的操作数,而return ...仍然是一个语句。


在任何情况下,如果构造函数中存在问题,PDO类都会抛出自己的异常。正确的(意思是,未损坏)语法如下:

try {
    $dbh = new PDO('mysql:blad','user','pass');
    return $dbh;
} catch (PDOException $e) {
    throw new Exception('Error connecting to database');
}

可能不使用分号,因为完整中的三元运算符被视为一个必须以分号结尾的命令:

(!$dbh) ? throw new Exception('Error connecting to database') : return $dbh;  

所以不要在以下两者之间的某个位置结束命令:)