2012-02-25 10 views
6

मैं इस कोड है:प्रतिबिंब अपवाद पकड़े जाने में असमर्थ?

namespace Some\Different\Name; 
     try { 
      $reflect = new ReflectionClass($class); 
X:   $instance = $reflect->newInstanceArgs($args); 
     } catch (ReflectionException $e) { 
      exit($e->getMessage()); 
     } 

और मैं इसे एक ReflectionException फेंक दिया बनाने की कोशिश कर परीक्षण कर रहा हूँ। और यह मुझे देता है:

Fatal error: Uncaught exception 'ReflectionException' with message 'Class MyClass does not have a constructor, so you cannot pass any constructor arguments' in ... on line X.

मैं क्या गलत कर रहा हूं?

पीएस: मुझे पता है कि अपवाद क्यों फेंक दिया गया है, मैं सिर्फ यह जानना चाहता हूं कि यह क्यों पकड़ा नहीं गया है!

+0

वास्तव में अजीब। क्या एक सामान्य 'पकड़ (अपवाद $ ई)' इसे पकड़ लेगा? –

+1

कृपया उस त्रुटि का बैकट्रैक जोड़ें। – hakre

+0

@ माइकपुर्सेल, यह नहीं है। – Shoe

उत्तर

6

अंत में। यह एक नामस्थान समस्या थी। यह इस बात से अजीब बात है कि PHP यह सूचित नहीं करता है कि आप किसी प्रकार के अपवाद को पकड़ने की कोशिश कर रहे हैं (ReflectionException) जो वर्तमान नामस्थान में मौजूद नहीं है।

बस \ से \ReflectionException जोड़ने में मेरी मदद की गई क्योंकि अब यह पता लगाने में सक्षम है कि मैं वास्तव में किस प्रकार का अपवाद ढूंढ रहा हूं।

एक अन्य समाधान जोड़ने के लिए होगा:

use \ReflectionException; 

सिर्फ नाम स्थान घोषणा के बाद।

+2

ऑटोलोडिंग है, इसलिए PHP पहले से नहीं जानता है कि भविष्य में कौन से अपवाद आएंगे;) और PHP ने आपको बताया कि एक अपरिचित अपवाद है और यहां तक ​​कि इसका नाम भी है ... नामस्थानों से निपटने के दौरान पर्यवेक्षण करना आसान है। हमारे सबसे अच्छे से हुआ है। – hakre

संबंधित मुद्दे