2011-02-05 8 views
6

में अपवाद फेंकने का कोई स्थिर तरीका है क्या php में अपवाद फेंकने का "स्थैतिक" तरीका है?क्या php

जब कोई mysql क्वेरी विफल हो जाती है तो मुझे अपवाद फेंकने की आवश्यकता होती है।

[email protected]_query($query) or throw new Exception(' Query Failed '); 

लेकिन यह काम नहीं कर रहा:

मैं इस कोशिश की।

और मैं throwException() function from this comment at PHP: Exceptions manual के आधार पर एक फ़ंक्शन का उपयोग कर रहा हूं, लेकिन मैं यह जानना चाहता हूं कि कक्षा बनाने के बिना ऐसा करने का कोई स्थिर तरीका है या नहीं।

+0

"स्थैतिक" का क्या अर्थ है? – BoltClock

+0

स्थिर द्वारा मेरा मतलब है कि कक्षा – sreejith

+0

को शुरू किए बिना मेरा मतलब है कि यह बेकार 'क्वेरी असफल' कथन सिर्फ एक उदाहरण है और वास्तव में आप क्वेरी –

उत्तर

4

आप सीधे or throw new Exception(); पर सक्षम नहीं होंगे क्योंकि throw एक बयान है, एक अभिव्यक्ति नहीं। चूंकि or वास्तव में एक ऑपरेटर है, इसलिए उम्मीद है कि इसके संचालन अभिव्यक्तियां होंगी (चीजें जो कुछ मानों का मूल्यांकन करती हैं)।

आप इसके बजाय यह करने के लिए होगा: के रूप में webbiedave बताते टिप्पणी कह रहा है कि आप कॉल करने के लिए की जरूरत है,

$re = mysql_query($query); 

if (!$re) { 
    throw new Exception('Query Failed'); 
} 

आप throwException() समारोह है कि PHP मैनुअल टिप्पणी द्वारा प्रस्तावित उपयोग करने के लिए प्रयास कर रहे हैं कि समारोह के बजाय सीधे throw बयान, इस तरह:

$re = mysql_query($query) or throwException('Query Failed'); 

PHP में कोई नियम कहता है कि आप एक वर्ग विधि से अपवाद फेंक करने की जरूरत नहीं है। जब तक उस अपवाद को पकड़ने का कोई तरीका है तो आप ठीक हैं। यदि आपका मतलब है कि आप Exception कक्षा का उपयोग किए बिना अपवाद फेंकना चाहते हैं, तो आपको, करना होगा। अपवाद वस्तुओं द्वारा प्रकृति हैं; आप एक अपवाद नहीं फेंक सकते हैं जो ऑब्जेक्ट नहीं है (या Exception वर्ग से प्राप्त नहीं होता है)।

यदि आप अपवाद फेंकना नहीं चाहते हैं लेकिन आप अक्सर PHP (नोटिस, चेतावनियां और घातक त्रुटियों) से देखे गए त्रुटि को उठाते हैं, तो trigger_error() का उपयोग करें।

$re = mysql_query($query); 

if (!$re) { 
    trigger_error('Query Failed', E_USER_ERROR); 
} 
+0

के साथ वास्तविक त्रुटि भी रखूंगा यह एक अच्छा विचार है धन्यवाद !!! – sreejith

+0

अनिवार्य प्रोग्रामिंग भाषाओं में सब कुछ एक बयान है;) 'फेंक' एक भाषा निर्माण है, इसलिए इसे पार्सर द्वारा निपटाया जाता है और कुछ मानों के लिए रनटाइम का मूल्यांकन नहीं किया जा सकता है, हाँ – meze

6

टिप्पणी जो आप इस तरह से अपवाद फेंकने वाले राज्यों से लिंक करते हैं, वे काम नहीं करेंगे। इसमें कहा गया है कि आप एक समारोह में यह जगह करने के लिए है:

function throwException($message = null, $code = null) { 
    throw new Exception($message, $code); 
} 

$re = mysql_query($query) or throwException('Query Failed'); 
+0

हाँ यह करता है। मैं अपवाद :: सेटमेसेज ('संदेश') जैसे कुछ करने का तरीका ढूंढ रहा था; लेकिन अब मुझे पता है कि बोल्टक्लॉक ने – sreejith

+0

@rados का जवाब देने के बाद यह संभव नहीं है: और वह कह रहा है कि आप 'या' के बाद फ़ंक्शन को कॉल करते हैं, लेकिन आपके प्रश्न में आप फ़ंक्शन के बजाय वास्तविक 'फेंक' कथन बुला रहे हैं। – BoltClock

+0

@ बोल्टक्लॉक हां, अब मैं ऐसा कर रहा हूं: $ re = @ mysql_query ($ query) या IException :: throwException ('क्वेरी विफल'); आईईक्सप्शन एक वर्ग है जिसे मैंने स्वयं बनाया है, मैं अपने स्वयं के उपयोग के बजाय एक पूर्व परिभाषित कक्षा की तलाश में था। – sreejith

2

तुम भी

mysql_query($query); 

if (mysql_error()) { 
    throw new Exception(...); 
} 

रूप mysql_error() रिटर्न रिक्त स्ट्रिंग की तरह कुछ अगर कोई त्रुटि है, जो false का आकलन करती थी कोशिश कर सकते हैं।

+0

उत्तर के लिए धन्यवाद, यह एक अच्छा तरीका है। – sreejith