कस्टम अपवाद बनाना
Exception क्लास का विस्तार करके डोमेन-विशिष्ट त्रुटि प्रकार बनाएँ
कस्टम अपवाद बनाना, CoddyKit पर PHP Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह PHP Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। PHP Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
कस्टम अपवाद क्यों?
कस्टम अपवाद आपको ये कार्य करने देते हैं:
- अपने अनुप्रयोग की त्रुटियों को सामान्य PHP त्रुटियों से अलग पहचानना
- डोमेन-विशिष्ट डेटा रखना (ऑर्डर ID, उपयोगकर्ता ID आदि)
- अलग-अलग स्तरों पर विशिष्ट त्रुटि प्रकारों को पकड़ना
- अर्थपूर्ण और स्वयं-वर्णनात्मक त्रुटि पदानुक्रम बनाना
Exception का विस्तार करना
Exception आधार वर्ग का विस्तार करके कस्टम अपवाद बनाएँ:
<?php
class ValidationException extends \Exception
{
private array $errors;
public function __construct(array $errors, string $message = '', int $code = 0)
{
$this->errors = $errors;
parent::__construct($message ?: implode(', ', $errors), $code);
}
public function getErrors(): array
{
return $this->errors;
}
}कस्टम अपवाद का उपयोग
अपने कस्टम अपवाद को फेंकें और पकड़ें:
<?php
function createUser(array $data): void {
$errors = [];
if (empty($data['email'])) $errors[] = 'Email required';
if (empty($data['name'])) $errors[] = 'Name required';
if ($errors) {
throw new ValidationException($errors);
}
// save user...
}
try {
createUser([]);
} catch (ValidationException $e) {
foreach ($e->getErrors() as $err) {
echo '- ' . $err . PHP_EOL;
}
}अपवाद पदानुक्रम का अभिकल्पन
अपने डोमेन के लिए एक पदानुक्रम का अभिकल्पन करें:
<?php
// Base exception for your app
class AppException extends \RuntimeException {}
// Domain-specific exceptions
class NotFoundException extends AppException {}
class AuthException extends AppException {}
class PaymentException extends AppException {}
// Specific payment errors
class InsufficientFundsException extends PaymentException {
public function __construct(public readonly float $balance, public readonly float $required) {
parent::__construct("Insufficient funds: have $balance, need $required");
}
}पदानुक्रम के आधार पर पकड़ना
सभी व्युत्पन्न अपवादों को संभालने के लिए आधार वर्ग को पकड़ें:
<?php
try {
processPayment($order);
} catch (InsufficientFundsException $e) {
echo 'Low balance: need ' . $e->required;
} catch (PaymentException $e) {
echo 'Payment failed: ' . $e->getMessage();
} catch (AppException $e) {
echo 'App error: ' . $e->getMessage();
} catch (\Throwable $e) {
// Last resort
error_log($e);
}अपवादों में संदर्भ जोड़ना
डिबगिंग के लिए अपवादों में अतिरिक्त डेटा जोड़ें:
<?php
class HttpException extends \RuntimeException
{
public function __construct(
private int $statusCode,
string $message = '',
?\Throwable $previous = null
) {
parent::__construct($message, $statusCode, $previous);
}
public function getStatusCode(): int
{
return $this->statusCode;
}
}HTTP अपवाद का उदाहरण
वेब अनुप्रयोग में HTTP अपवाद का उपयोग:
<?php
try {
$user = findUserById($id);
if (!$user) throw new HttpException(404, 'User not found');
if (!$user->canAccess($resource)) {
throw new HttpException(403, 'Access denied');
}
} catch (HttpException $e) {
http_response_code($e->getStatusCode());
echo json_encode(['error' => $e->getMessage()]);
}इंटरफ़ेस-आधारित अपवाद
असंबंधित अपवाद वर्गों को समूहित करने के लिए इंटरफ़ेस का उपयोग करें:
<?php
interface UserFacingException
{
public function getUserMessage(): string;
}
class ValidationException extends \Exception implements UserFacingException
{
public function getUserMessage(): string
{
return 'Please check your input: ' . $this->getMessage();
}
}
// In controller:
catch (UserFacingException $e) {
echo $e->getUserMessage();
}नामित कंस्ट्रक्टर पैटर्न
सामान्य अपवाद परिस्थितियों के लिए स्थैतिक फ़ैक्टरी विधियों का उपयोग करें:
<?php
class OrderException extends \RuntimeException
{
public static function notFound(int $id): self
{
return new self("Order #$id not found", 404);
}
public static function alreadyShipped(int $id): self
{
return new self("Order #$id already shipped", 409);
}
}
throw OrderException::notFound($orderId);अपवादों को क्रमबद्ध करना
लॉग लेखन या API प्रतिक्रियाओं के लिए अपवाद डेटा को एक सरणी में बदलें:
<?php
function exceptionToArray(\Throwable $e): array {
return [
'type' => get_class($e),
'message' => $e->getMessage(),
'code' => $e->getCode(),
'file' => $e->getFile(),
'line' => $e->getLine(),
'trace' => $e->getTraceAsString(),
'previous' => $e->getPrevious()
? exceptionToArray($e->getPrevious())
: null,
];
}कस्टम अपवादों की सर्वोत्तम प्रक्रियाएँ
कस्टम अपवादों के अभिकल्पन के लिए दिशानिर्देश:
- अप्रत्याशित परिस्थितियों के लिए
RuntimeExceptionका विस्तार करें - प्रोग्रामर की त्रुटियों (अमान्य तर्कों) के लिए
LogicExceptionका विस्तार करें - हर संभावित संदेश के लिए अलग अपवाद वर्ग न बनाएँ — इसके बजाय कोड का उपयोग करें
- अपवाद वर्गों के नाम PascalCase में रखें और उनका अंत Exception से करें
- दस्तावेज़ में बताएँ कि प्रत्येक विधि कौन-से अपवाद फेंक सकती है
त्वरित जाँच
अपने कोड में तार्किक त्रुटि दर्शाने वाला कस्टम अपवाद बनाने के लिए किस PHP आधार वर्ग का विस्तार करना चाहिए?
पुनरावलोकन: कस्टम अपवाद
कस्टम अपवादों का सारांश:
Exceptionया उसकी उपवर्ग का विस्तार करें- डोमेन-विशिष्ट गुण और विधियाँ जोड़ें
- पदानुक्रम बनाएँ — सभी बच्चों को पकड़ने के लिए अभिभावक को पकड़ें
- असंबंधित अपवादों को समूहित करने के लिए इंटरफ़ेस का उपयोग करें
- स्पष्टता के लिए स्थैतिक नामित कंस्ट्रक्टर का उपयोग करें
- हमेशा
parent::__construct()को कॉल करें
एआई शिक्षक के साथ PHP सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 49
- पाठ
- 195
अक्सर पूछे जाने वाले प्रश्न
क्या “कस्टम अपवाद बनाना” पाठ निःशुल्क है?
हाँ—“कस्टम अपवाद बनाना” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और PHP Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। PHP Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“कस्टम अपवाद बनाना” में मैं क्या सीखूँगा?
Exception क्लास का विस्तार करके डोमेन-विशिष्ट त्रुटि प्रकार बनाएँ आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ PHP Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या PHP Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर PHP Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“कस्टम अपवाद बनाना” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस PHP Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर PHP Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- PHP की त्रुटि के प्रकार और रिपोर्टिंग
- Try, Catch और Finally
- कस्टम अपवाद बनाना
- त्रुटियों की लॉगिंग और सर्वोत्तम अभ्यास