- 论坛徽章:
- 0
|
@运算符没深入研究,但是根据基本原则,我觉得你的代码中存在一些问题:
@是用于抑制错误输出的,因此不参与抛出异常的情形;
运算符的优先级;
带有流程控制的运算符的用法;
@list($a,$b) = foo() or throw new Exception('undefined index exception');
1:除去分号和@,整行代码就是一个表达式,而@是对表达式起作用,也就作用于整行代码,而不仅仅是出错的子表达式;
2:要更清晰的表达代码的意图,使用括号比较好,应该也可以把@置于子表达式中;
3:=优先级高于or,因此,要执行throw,应该是前面的字表达式的值==false,而不是子表达式出错的情形(我猜测你的意图),这里,子表达式的值也就是foo的返回值,这么看来,or后面的处理似乎与@的目的冲突了,但实际上他们勇于不同的目的。
我觉得可以这样:foo()可能返回==false的值,表明失败,此时:
list($a,$b) = (foo() or throw new Exception('undefined index exception'));
如果foo()可能输出一些错误描述,不妨再考虑@。 |
|