Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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 - Fatal编程技术网

PHP:三元表达式中的多个语句

PHP:三元表达式中的多个语句,php,ternary,Php,Ternary,我有一个函数,看起来像这样: function fun() { $pMana < 20 ? error(1) : $pMana -= 20; //do stuff } 函数fun() { $pMana

我有一个函数,看起来像这样:

function fun()
{
   $pMana < 20 ? error(1) : $pMana -= 20;
   //do stuff
}
函数fun()
{
$pMana<20?错误(1):$pMana-=20;
//做事
}
我想在调用error函数时,它也会退出函数,类似这样

function fun()
{
   $pMana < 20 ? (error(1); return) : $pMana -= 20; //invalid syntax
   //do stuff
}
函数fun()
{
$pMana<20?(错误(1);返回):$pMana-=20;//语法无效
//做事
}

我还没有看到一个三元表达式能够处理不止一个这样的语句,但我对这个还不熟悉。有可能吗?

在这种情况下使用
if
语句

三元运算符应该返回单个值,因此存在单语句限制。在三元运算符中,也不应使用具有任何明显副作用的函数

您的建议不可避免地会导致非常不可读的代码,您应该关注可读性,而不是行数/字符数。大多数代码在编写/编辑时会被多次读取

编辑:

你也可以使用类似的方法

assert($pMana > 20);
$pMana -= 20

但是,断言不应用于处理常见情况(如用户输入验证)。经验法则是,失败的断言应该总是表明代码中存在错误。断言表达式应以“尽快捕获错误”的格言(在这种情况下,它将用于防止bug导致mana变为负值,可能导致ISSE)的名义涵盖有关程序/程序状态其他部分输入的假设。

在这种情况下使用
if
语句

三元运算符应该返回单个值,因此存在单语句限制。在三元运算符中,也不应使用具有任何明显副作用的函数

您的建议不可避免地会导致非常不可读的代码,您应该关注可读性,而不是行数/字符数。大多数代码在编写/编辑时会被多次读取

编辑:

你也可以使用类似的方法

assert($pMana > 20);
$pMana -= 20

但是,断言不应用于处理常见情况(如用户输入验证)。经验法则是,失败的断言应该总是表明代码中存在错误。断言表达式应以“尽快捕获错误”的口号(在这种情况下,它将用于防止bug导致mana变为负值,可能导致isses)的名义,涵盖有关程序/程序状态其他部分输入的假设.

三元运算符通常用于为变量赋值。
逻辑语句应与“if”一起使用。

三元运算符通常用于为变量赋值。
逻辑语句应该与“if”一起使用。

assert
不是
if
,将其用于代码的调试版本(仅?)。这很有趣,为什么必须将assert仅用于调试?@dukevin,因为它不是真正透明的(尤其是在处理断言时)。它只是一个sugeston(OP的帖子建议代码是用来处理错误情况的)。
assert
不是
如果
,那么将它用于代码的调试版本(仅?)。这很有趣,为什么必须assert只用于调试?@dukevin,因为它不是真正透明的(尤其是在处理断言时)。这只是一个sugeston(OP的帖子表明代码是用来处理错误情况的)。堆叠ternary是无效的,堆叠ternary是无效的