निम्न उदाहरण में, यदि कक्षा मौजूद नहीं है, तो मैं त्रुटि को पकड़ना चाहता हूं और इसके बजाय Null
कक्षा बनाना चाहता हूं।PHP "क्लास नहीं मिला" त्रुटि क्यों पकड़ता है?
लेकिन मेरे प्रयास/पकड़ विवरणों के बावजूद, PHP बस मुझे Class 'SmartFormasdfasdf' not found
बताता है।
मैं 'कक्षा नहीं मिली' त्रुटि को पकड़ने के लिए PHP कैसे प्राप्त कर सकता हूं?
<?php
class SmartFormLogin extends SmartForm {
public function render() {
echo '<p>this is the login form</p>';
}
}
class SmartFormCodeWrapper extends SmartForm {
public function render() {
echo '<p>this is the code wrapper form</p>';
}
}
class SmartFormNull extends SmartForm {
public function render() {
echo '<p>the form "' . htmlentities($this->idCode) . '" does not exist</p>';
}
}
class SmartForm {
protected $idCode;
public function __construct($idCode) {
$this->idCode = $idCode;
}
public static function create($smartFormIdCode) {
$className = 'SmartForm' . $smartFormIdCode;
try {
return new $className($smartFormIdCode);
} catch (Exception $ex) {
return new SmartFormNull($smartformIdCode);
}
}
}
$formLogin = SmartForm::create('Login');
$formLogin->render();
$formLogin = SmartForm::create('CodeWrapper');
$formLogin->render();
$formLogin = SmartForm::create('asdfasdf');
$formLogin->render();
?>
समाधान:
धन्यवाद @Mchl, यह कैसे मैं यह तो हल है:
public static function create($smartFormIdCode) {
$className = 'SmartForm' . $smartFormIdCode;
if(class_exists($className)) {
return new $className($smartFormIdCode);
} else {
return new SmartFormNull($smartFormIdCode);
}
}
मैं भूल गया 'वर्ग नहीं मिला' , पीएचपी आज़माएं/फीचर प्राप्त करने में आपको अपनी खुद की त्रुटियों को फेंकने के लिए आपको अपना अपवाद हैंडलिंग बनाने में मदद मिलती है, लेकिन परिणामस्वरूप सी #/जावा में त्रुटियों को स्वयं नहीं पकड़ा जाता है। –
http://www.php.net/manual/en/class.errorexception.php देखें उदाहरण के लिए अपवादों के लिए सभी को "पुनः लिखना" त्रुटियों को कैसे लिखें। साथ ही, जैसा कि अन्य सुझाव दिया गया है, 5.3 के बाद से आप अपवाद फेंकने के लिए ऑटोलोडर का उपयोग करना चाहेंगे जब दी गई कक्षा वाली फ़ाइल नहीं मिलती है। – Mchl
@ एडवर्ड - यह निश्चित रूप से आपको * अपवाद * पकड़ने देता है, लेकिन PHP के मूल निवासी लगभग सभी अपवादों को फेंक नहीं देते हैं, केवल त्रुटियां। आप अपने स्वयं के * error_handler * को परिभाषित करके आसानी से काम कर सकते हैं और यह त्रुटि अपवाद का उपयोग करके अपवादों को फेंक कर (http://au.php.net/errorexception और वहां उदाहरण देखें)। यह आसानी से एक उपयोगी अपवाद आधारित प्रणाली में PHP की मूल त्रुटि प्रणाली को स्विच करता है जो फेंक/कोशिश/पकड़ आदि के साथ काफी अच्छी तरह से काम करता है –