تسلسل الكائنات في PHP: الدوال، الطرق والأمثلة العملية

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

تسلسل الكائنات في PHP: من الأساسيات إلى التقنيات المتقدمة



التسلسل هو عملية تحويل هياكل البيانات المعقدة (الكائنات، المصفوفات) إلى تنسيق خطي مناسب للتخزين أو النقل. في PHP، هذه الآلية مهمة بشكل خاص للحفاظ على حالة الكائنات بين الطلبات، ونقل البيانات عبر API، أو تخزينها في قواعد البيانات. في هذه المقالة، سنشرح بالتفصيل جميع جوانب التسلسل في PHP.



ما هو التسلسل ولماذا نحتاجه؟



يسمح التسلسل بـ "تجميد" الكائن في سلسلة نصية، ثم استعادته مرة أخرى. هذا مفيد في السيناريوهات التالية:

  • حفظ جلسات المستخدم (يقوم PHP تلقائياً بتسلسل بيانات الجلسة)
  • تخزين الكائنات المعقدة مؤقتاً في Redis أو Memcached
  • نقل الكائنات بين الخدمات المصغرة
  • تخزين الإعدادات في ملفات
  • تصحيح الأخطاء وتسجيل حالة الكائنات


التسلسل الأساسي: serialize() و unserialize()



يوفر PHP دالتين رئيسيتين للعمل مع التسلسل:



<?phpclass 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('إيفان بيتروف', 'ivan@example.com', 'secret123');$serialized = serialize($user);echo $serialized;// الإخراج: O:4:"User":3:{s:4:"name";s:13:"إيفان بيتروف";s:5:"email";s:16:"ivan@example.com";s:14:"\\0User\\0password";s:9:"secret123";}

// استعادة الكائن$unserialized = unserialize($serialized);echo $unserialized->name; // إيفان بيتروف?>


هام: تقوم الدالة serialize() بمعالجة جميع خصائص الكائن، بما في ذلك الخصائص الخاصة والمحمية. يتم ترميز الخصائص الخاصة ببادئة \\0ClassName\\0، والخصائص المحمية ببادئة \\0*\\0.



الطرق السحرية __sleep() و __wakeup()



للتحكم في عملية التسلسل، يوفر PHP طريقتين سحريتين:



  • __sleep() — يتم استدعاؤها قبل التسلسل. يجب أن تعيد مصفوفة بأسماء الخصائص التي يجب تسلسلها.
  • __wakeup() — يتم استدعاؤها بعد إلغاء التسلسل. تُستخدم لإعادة تهيئة الموارد (مثل اتصالات قاعدة البيانات).


<?phpclass DatabaseConnection {    private $connection;    private $dsn;    private $username;    private $password;    private $cache = [];

public function __construct($dsn, $username, $password) { $this->dsn = $dsn; $this->username = $username; $this->password = $password; $this->connect(); }

private function connect() { // محاكاة الاتصال بقاعدة البيانات $this->connection = new stdClass(); $this->connection->connected = true; }

public function __sleep() { // لا نقوم بتسلسل مورد الاتصال وكلمة المرور return ['dsn', 'username', 'cache']; }

public function __wakeup() { // استعادة الاتصال بعد إلغاء التسلسل $this->connect(); }}

$db = new DatabaseConnection('mysql:host=localhost;dbname=test', 'root', 'pass');$serialized = serialize($db);$restored = unserialize($serialized);?>


التسلسل إلى JSON: json_encode() و json_decode()



JSON هو تنسيق أكثر عالمية، مدعوم من قبل العديد من لغات البرمجة. في PHP، يتم استخدام الدالتين json_encode() و json_decode() للتسلسل إلى JSON.



<?phpclass Product {    public $id;    public $name;    public $price;

public function __construct($id, $name, $price) { $this->id = $id; $this->name = $name; $this->price = $price; }}

$product

توصيات