Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:对赋值以外的内容使用三元运算符–;有效用例?_Php_Ternary Operator - Fatal编程技术网

PHP:对赋值以外的内容使用三元运算符–;有效用例?

PHP:对赋值以外的内容使用三元运算符–;有效用例?,php,ternary-operator,Php,Ternary Operator,不幸的是,我还没有找到任何关于这方面的官方资料 是否允许使用这样的三元运算符来缩短和if/else语句: (isset($someVar) ? $this->setMyVar('something') : $this->setMyVar('something else')); 在PHP文档中,三元运算符用以下示例解释: $action = (empty($_POST['action'])) ? 'standard' : $_POST['action']; 这让我相信我的用例可能会

不幸的是,我还没有找到任何关于这方面的官方资料

是否允许使用这样的三元运算符来缩短和if/else语句:

(isset($someVar) ? $this->setMyVar('something') : $this->setMyVar('something else'));
在PHP文档中,三元运算符用以下示例解释:

$action = (empty($_POST['action'])) ? 'standard' : $_POST['action'];

这让我相信我的用例可能会起作用,但它并不真正有效,因为setter函数不会返回任何内容。

是的,您可以。来自:

[…]三元运算符是一个表达式,[…]它的计算结果不是变量,而是表达式的结果

尽管三元函数主要用于赋值,但您可以按照建议使用它,因为函数调用是一个表达式,因此将计算(并执行)相应的函数

如果setter函数将返回一个值,那么它将不会被分配给任何对象,因此将丢失。但是,因为您说过setter不返回任何内容,所以整个三元运算符将求值为nothing并返回nothing。那很好

如果这比常规的If/else更具可读性,则是一个不同的故事。在团队中工作时,我建议坚持常规的if/else

或者,使用这种语法,哪种更常见

$this->myVar = isset($someVar) ? 'something' : 'something else';
或者,使用setter:

$this->setMyVar(isset($someVar) ? 'something' : 'something else');

当然,你可以这样使用它。有什么问题?(正如你所说:三元运算符是一个简短的if/else语句,因此你可以用完全相同的方式使用它)我认为这更像是一个可读性问题。我以前也用过这个,如果你不关心返回的内容,可以使用它。
?:
是一个运算符。运算符用于将(一个、两个或三个)表达式连接到更大的表达式中。它不能替代
if/then/else
语句。这两种语言结构(三元运算符和
if/then/else
语句)并不相互排斥;有两种方式都可以编写的代码片段。在您的情况下,我会使用如下三元:
$this->setMyVar(isset($someVar)-“something”:“something other”)谢谢–我正在用我的语言查看那篇文章的本地化版本,但这一部分根本不存在。