2012-10-05 16 views
6

Possible Duplicate:
PHP: 'or' statement on instruction fail: how to throw a new exception?पीएचपी ओल्ड-स्कूल समारोह "या" अपवाद के साथ

पीएचपी में, विभिन्न MySQL कनेक्शन ट्यूटोरियल में newbies के बीच विशेष रूप से लोकप्रिय है, आप हमेशा कुछ इस तरह करने में सक्षम किया गया है ...

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

लेकिन अगर मैं इस यह विफल रहता है की तरह कुछ ...

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

तो जैसा ... कोशिश

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

कोई भी इस तरह कुछ करने के बारे में जानता है? क्या मुझे "या" के बाद एक चर सेट करना होगा?

+1

आप एक 'throwException निर्धारित कर सकते हैं()' समारोह है कि बस एक अपवाद फेंकता है। – Wiseguy

+0

प्रतिक्रियाओं के लिए सभी को धन्यवाद। – PolishHurricane

उत्तर

10

यह कम "चालाक" जिस तरह से कार्य करें:

if(!foo()) { 
    throw new Exception('AHH!'); 
} 

मामले में आप सोच रहे हैं कि क्यों or throw new Exception() काम नहीं करता, तो शायद आपने or operator की short-circuiting पर भरोसा कर रहे हैं: पहला तर्क तो सच है, फिर यह निर्धारित करने के लिए दूसरे का मूल्यांकन करने की कोई आवश्यकता नहीं है कि उनमें से कोई सत्य है (क्योंकि आप पहले ही जानते हैं कि कम से कम उनमें से एक सत्य है)।

आप throw के साथ ऐसा नहीं कर सकते क्योंकि यह एक अभिव्यक्ति है जो एक बूलियन मान (या किसी भी मूल्य को वापस नहीं लौटाती), इसलिए or आईएनजी कोई समझ नहीं लेता है।

आप वास्तव में ऐसा करना चाहते हैं, तो @emie द्वारा हटा जवाब काम करना चाहिए, (एक समारोह है कि बस एक अपवाद फेंकता बनाने के) के बाद से कोई वापसी मान के साथ भी एक समारोह एक बूलियन बयान में मान्य है, लेकिन यह ऐसा लगता है कि इस तरह के एक समारोह को बनाने के लिए एक बुरा विचार लगता है ताकि आप बुलियन कथन के साथ चालाक चीजें कर सकें।

+2

दरअसल, यह काम नहीं करता है क्योंकि 'फेंक', जैसे 'इको', 'शामिल' इत्यादि एक फ़ंक्शन के बजाए एक भाषा निर्माण है :) –

+0

हाँ मैं आईएफ कथन से बचने की कोशिश कर रहा था। बहुत उपयोगी, धन्यवाद दोस्तों। – PolishHurricane

3

इसी तरह के प्रश्न से पहले पूछा गया है।

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.