परिचय: बुनियादी त्रुटि प्रबंधन केवल शुरुआत क्यों है
हर PHP डेवलपर try/catch संरचना को जानता है। लेकिन जब प्रोजेक्ट हजारों लाइनों के कोड तक बढ़ जाता है और सर्वर पर लोड अधिक हो जाता है, तो केवल अपवादों को पकड़ना पर्याप्त नहीं होता। उन्नत त्रुटि प्रबंधन सिर्फ 'पकड़ो और भूल जाओ' नहीं है, बल्कि एक पूरी प्रणाली है: लॉगिंग से लेकर चेतावनियों को अपवादों में बदलने तक।
इस लेख में, हम उन तकनीकों पर चर्चा करेंगे जो आपको विश्वसनीय और दोष-सहिष्णु कोड लिखने में मदद करेंगी: एकाधिक catch, कस्टम अपवाद वर्ग, वैश्विक हैंडलर और PSR-3 लॉगर्स के साथ एकीकरण। यह सामग्री उन डेवलपर्स के लिए है जो PHP की मूल बातों से पहले से परिचित हैं।
1. एकाधिक catch ब्लॉक और अपवाद पदानुक्रम
PHP 7.1 से शुरू करके, आप एक ही try ब्लॉक में विभिन्न प्रकार के अपवादों को पकड़ सकते हैं। यह आपको त्रुटियों पर सटीक प्रतिक्रिया देने की अनुमति देता है:
<?phpclass DatabaseException extends \\Exception {}class ValidationException extends \\Exception {}
try { // कोड जो विभिन्न अपवाद फेंक सकता है $user = $db->query('SELECT ...'); if (!$user) { throw new DatabaseException('क्वेरी त्रुटि'); } if (empty($user['email'])) { throw new ValidationException('ईमेल आवश्यक है'); }} catch (DatabaseException $e) { // DB त्रुटि लॉग करें error_log('DB त्रुटि: ' . $e->getMessage()); echo 'सर्वर में अस्थायी त्रुटि। बाद में पुनः प्रयास करें।';} catch (ValidationException $e) { // उपयोगकर्ता को समझने योग्य संदेश दिखाएं echo 'त्रुटि: ' . htmlspecialchars($e->getMessage());} catch (\\Throwable $e) { // बाकी सब कुछ पकड़ें (Error सहित) error_log('गंभीर: ' . $e->getMessage()); echo 'गंभीर त्रुटि।';}?>यह क्यों महत्वपूर्ण है? प्रत्येक प्रकार के अपवाद को अपनी प्रतिक्रिया की आवश्यकता होती है। DB त्रुटि - उपयोगकर्ता से विवरण छिपाएं, मान्यता त्रुटि - फ़ील्ड हाइलाइट के साथ फ़ॉर्म दिखाएं, गंभीर त्रुटि - व्यवस्थापक को सूचना भेजें।
\\Throwable पर ध्यान दें - यह एक इंटरफ़ेस है जिसे Exception और Error (PHP की घातक त्रुटियाँ) दोनों लागू करते हैं। किसी भी त्रुटि को छोड़ने से बचने के लिए अंतिम catch ब्लॉक में इसका उपयोग करें।
2. कस्टम अपवाद वर्ग: मानकों का विस्तार
मानक \\Exception वर्ग बुनियादी कार्यक्षमता प्रदान करता है। लेकिन वास्तविक प्रोजेक्ट्स में, अपने स्वयं के अपवाद पदानुक्रम बनाना सुविधाजनक होता है - इससे डिबगिंग और प्रबंधन सरल हो जाता है।
वेब एप्लिकेशन के लिए संरचना का उदाहरण:
<?phpnamespace App\\Exceptions;
// एप्लिकेशन का आधार अपवादclass AppException extends \\RuntimeException{ protected $context = [];
public function __construct(string $message = '', int $code = 0, ?\\Throwable $previous = null, array $context = []) { parent::__construct($message, $code, $previous); $this->context = $context; }
public function getContext(): array { return $this->context; }}
// HTTP त्रुटियों के लिए अपवादclass HttpException extends AppException{ private int $statusCode;
public function __construct(int $statusCode, string $message = '', array $context = []) { $this->statusCode = $statusCode; parent::__construct($message, $statusCode, null, $context); }
public function getStatusCode(): int { return $this->statusCode; }}
// उपयोगthrow new HttpException(404, 'पृष्ठ नहीं मिला', ['uri' => $_SERVER['REQUEST_URI']]);?>लाभ:
- अतिरिक्त संदर्भ (अनुरोध पैरामीटर, उपयोगकर्ता ID) पास किया जा सकता है - इससे लॉगिंग सरल हो जाती है।
- अपवाद अर्थ के अनुसार समूहित होते हैं:
HttpException,ValidationException,PaymentException।