2012-10-05 8 views
6
PHP

Possible Duplicate:
PHP: 'or' statement on instruction fail: how to throw a new exception?PHP eski okul işlevi "veya" çeşitli MySQL bağlantı dökümanında başlayanlar arasında özellikle popüler

, her zaman ... Böyle bir şey yapmak mümkün oldum

<?php 
foo() or die('foo() failed!'); 
?> 

Ancak başarısız böyle bir şey ... yani gibi

<?php 
foo() or throw new Exception('AHH!'); 
?> 

... çalışırsanız

"Parse error: syntax error, unexpected 'throw' (T_THROW) in..."

Buna benzer bir şeyi nasıl yapacağını bilen var mı? "Veya" den sonra bir değişken ayarlamak zorunda mıyım?

+1

Bir 'throwException tanımlayabiliriz()' işlevi. – Wiseguy

+0

Yanıtlar için herkese teşekkürler. – PolishHurricane

cevap

10

bunu az "zeki" bir yol yapın:

Eğer or operator ait short-circuiting dayanarak konum çünkü durumunda
if(!foo()) { 
    throw new Exception('AHH!'); 
} 

Eğer or throw new Exception() çalışmıyor neden merak ediyorsanız, bu kadar: İlk argüman ise doğruysa, bir tanesinin doğru olup olmadığını belirlemek için ikinciyi değerlendirmeye gerek yoktur (Zaten 'un en az en az bunlardan birinin doğru olduğunu biliyorsunuz).

Bunu throw ile yapamazsınız, çünkü bir boole değeri (veya herhangi bir değer) döndürmeyen bir deyimdir, bu nedenle or, herhangi bir anlam ifade etmez.

Eğer gerçekten bunu yapmak istiyorsanız, @emie tarafından silindi cevap hayır dönüş değeri ile bile bir işlev bir boole açıklamada geçerli olduğundan, (sadece bir istisna atar bir işlev yapmak) faydalı olur ancak gerektiği Böyle bir işlev oluşturmak için kötü bir fikir gibi görünüyor, bu yüzden boolean ifadeleriyle akıllı şeyler yapabilirsiniz.

+2

Aslında, işe yaramaz çünkü 'atmak', tıpkı 'echo', 'include' gibi, bir fonksiyon yerine bir dil yapısıdır :) –

+0

Evet IF ifadesinden kaçınmaya çalışıyordum. Çok yararlı, teşekkürler çocuklar. – PolishHurricane

3

Benzer soru daha önce sorulmuştur. basitçe bir istisna atar

PHP: 'or' statement on instruction fail: how to throw a new exception?

the reason

bar() or throw new Exception(); 

is illegal, is because

(boolean)throw new Exception(); 

is also illegal. In essence, the process of throwing an exception doesn't generate a return value for the operator to check.