PHP में ऑब्जेक्ट सीरियलाइज़ेशन: पूरी गाइड
सीरियलाइज़ेशन एक प्रक्रिया है जिसमें जटिल डेटा स्ट्रक्चर (ऑब्जेक्ट, ऐरे) को एक स्ट्रिंग या बाइनरी फॉर्मेट में बदला जाता है, जिसे फ़ाइल में सेव किया जा सकता है, नेटवर्क पर भेजा जा सकता है या कैश किया जा सकता है। PHP में यह मैकेनिज्म बिल्ट-इन फंक्शन serialize() और unserialize() द्वारा काम करता है। इस आर्टिकल में हम विस्तार से जानेंगे कि ऑब्जेक्ट सीरियलाइज़ेशन कैसे काम करता है, क्या-क्या सावधानियाँ रखनी चाहिए, और मैजिक मेथड्स का उपयोग करके प्रक्रिया को कैसे कस्टमाइज़ करें।
सीरियलाइज़ेशन के मुख्य फंक्शन
PHP सीरियलाइज़ेशन के लिए दो मुख्य फंक्शन प्रदान करता है:
serialize($value)— किसी भी वैल्यू (resource को छोड़कर) को स्टोर करने योग्य स्ट्रिंग में बदलता है। ऑब्जेक्ट के लिए, यह क्लास का नाम और सभी प्रॉपर्टीज़ (प्राइवेट और प्रोटेक्टेड सहित) को सेव करता है।unserialize($string)— स्ट्रिंग से मूल वैल्यू को पुनर्स्थापित करता है। ऑब्जेक्ट के लिए, यह क्लास का कंस्ट्रक्टर (यदि परिभाषित है) को कॉल करता है और सेव की गई प्रॉपर्टीज़ को सेट करता है।
ऑब्जेक्ट सीरियलाइज़ेशन का सरल उदाहरण
एक बेसिक User क्लास और उसके सीरियलाइज़ेशन को देखते हैं:
<?php
class User {
public $name;
public $email;
private $password;
public function __construct($name, $email, $password) {
$this->name = $name;
$this->email = $email;
$this->password = $password;
}
}
$user = new User('राहुल', 'rahul@example.com', 'secret123');
$serialized = serialize($user);
echo $serialized;
// आउटपुट: O:4:"User":3:{s:4:"name";s:10:"राहुल";s:5:"email";s:17:"rahul@example.com";s:12:"\0User\0password";s:9:"secret123";}
?>
ध्यान दें: प्राइवेट प्रॉपर्टी $password स्ट्रिंग में \0User\0password के रूप में दिखती है — यह प्राइवेट फील्ड के लिए एक विशेष नोटेशन है, जहाँ \0 एक नल बाइट है।
सीरियलाइज़्ड स्ट्रिंग से ऑब्जेक्ट को पुनर्स्थापित करना
<?php
$serialized = 'O:4:"User":3:{s:4:"name";s:10:"राहुल";s:5:"email";s:17:"rahul@example.com";s:12:"\0User\0password";s:9:"secret123";}';
$user = unserialize($serialized);
echo $user->name; // राहुल
echo $user->email; // rahul@example.com
// प्राइवेट प्रॉपर्टी password भी पुनर्स्थापित हो गई है, लेकिन सीधे एक्सेस नहीं की जा सकती
?>
महत्वपूर्ण: डीसीरियलाइज़ेशन के दौरान, PHP क्लास को लोड करने का प्रयास करता है यदि वह पहले से परिभाषित नहीं है। यदि क्लास मौजूद नहीं है, तो बिल्ट-इन क्लास __PHP_Incomplete_Class का एक इंस्टेंस बनाया जाएगा।
मैजिक मेथड्स __sleep() और __wakeup()
सीरियलाइज़ेशन प्रक्रिया को नियंत्रित करने के लिए PHP दो मैजिक मेथड्स प्रदान करता है:
__sleep()— सीरियलाइज़ेशन से पहले कॉल किया जाता है। इसे उन प्रॉपर्टीज़ के नामों की एक ऐरे लौटानी चाहिए जिन्हें सीरियलाइज़ करना है। यह डेटाबेस कनेक्शन बंद करने, रिसोर्सेज़ को मुक्त करने या संवेदनशील डेटा को छिपाने के लिए उपयोगी है।__wakeup()— डीसीरियलाइज़ेशन के तुरंत बाद कॉल किया जाता है। इसका उपयोग डेटाबेस से पुनः कनेक्ट करने, रिसोर्सेज़ को पुनर्स्थापित करने या डेटा की अखंडता की जाँच करने के लिए किया जाता है।
__sleep() और __wakeup() का उदाहरण
<?php
class DatabaseConnection {
private $host;
private $user;
private $password;
private $connection;
public function __construct($host, $user, $password) {
$this->host = $host;
$this->user = $user;
$this->password = $password;
$this->connect();
}
private function connect() {
// कनेक्शन का अनुकरण
$this->connection = "{$this->host} से कनेक्शन रिसोर्स";
}
public function __sleep() {
// कनेक्शन रिसोर्स को सीरियलाइज़ न करें, केवल पुनः कनेक्ट करने के लिए डेटा रखें
return ['host', 'user', 'password'];
}
public function __wakeup() {
// डीसीरियलाइज़ेशन के बाद कनेक्शन पुनर्स्थापित करें
$this->connect();
}
public function getConnection() {
return $this->connection;
}
}
$db = new DatabaseConnection('localhost', 'root', 'mypassword');
$serializedDb = serialize($db);
$restoredDb = unserialize($serializedDb);
echo $restoredDb->getConnection(); // localhost से कनेक्शन रिसोर्स
?>
इस उदाहरण में, __sleep() मेथड कनेक्शन रिसोर्स को सीरियलाइज़ होने से रोकता है, जबकि __wakeup() डीसीरियलाइज़ेशन के बाद कनेक्शन को पुनः स्थापित करता है।
पुस्तकालय में भी
Combine Swift: पूर्ण गाइड उदाहरणों के साथ
Hibernate ORM: Java में डेटाबेस के साथ काम करने के लिए शक्तिशाली उपकरण
जावा के लिए डिपेंडेंसी इंजेक्शन कंटेनर: Spring IoC, Google Guice और Dagger
better-sqlite3-typescript TypeScript: पूरी गाइड उदाहरणों के साथ