- 論壇徽章:
- 0
|
@運算符沒深入研究,但是根據基本原則,我覺得你的代碼中存在一些問題:
@是用于抑制錯誤輸出的,因此不參與拋出異常的情形;
運算符的優(yōu)先級;
帶有流程控制的運算符的用法;
@list($a,$b) = foo() or throw new Exception('undefined index exception');
1:除去分號和@,整行代碼就是一個表達式,而@是對表達式起作用,也就作用于整行代碼,而不僅僅是出錯的子表達式;
2:要更清晰的表達代碼的意圖,使用括號比較好,應該也可以把@置于子表達式中;
3:=優(yōu)先級高于or,因此,要執(zhí)行throw,應該是前面的字表達式的值==false,而不是子表達式出錯的情形(我猜測你的意圖),這里,子表達式的值也就是foo的返回值,這么看來,or后面的處理似乎與@的目的沖突了,但實際上他們勇于不同的目的。
我覺得可以這樣:foo()可能返回==false的值,表明失敗,此時:
list($a,$b) = (foo() or throw new Exception('undefined index exception'));
如果foo()可能輸出一些錯誤描述,不妨再考慮@。 |
|