سؤال

لدي بعض الكائنات التي أرغب في التخزين المؤقت على القرص. يمكنني استخدام التسلسل () في هذه العملية. تحتوي الكائنات على بعض المراجع إلى كائنات أخرى. لا أريد أن يتم تسلسل تلك المسلسل أيضا (يتم ذلك في مكان آخر) لأنه سيعطيني مثيلات مكررة لنفس كائن العالم الحقيقي عندما غير ميول.

هل هناك طريقة لتغيير مراجع الكائنات إلى السلاسل (بالإشارة إلى نفس الكائنات، ولكن عن طريق المعرف) قبل تسلسل وتغييرها مرة أخرى بعد، والقيام بذلك داخل كود الفئة (ليس قبل وبعد بيانات التسلسل (UN) ب

جيد:

class TheStuff {
 private $otherThing;
 private function __yeahDudeDoThisOnSerialize() {
  $this->otherThing = $this->otherThing->name;
 }
 private function __viceVersa() {
  $this->otherThing = get_thing_by_name($this->otherThing);
 }
}

serialize($someStuff);

سيئة:

class TheStuff {
 private $otherThing;
 public function yeahDudeDoThisOnSerialize() {
  $this->otherThing = $this->otherThing->name;
 }
 public function viceVersa() {
  $this->otherThing = get_thing_by_name($this->otherThing);
 }
}

$someStuff->yeahDudeDoThisOnSerialize();
serialize($someStuff);
$someStuff->viceVersa();
هل كانت مفيدة؟

المحلول

أعتقد أنك تبحث عن __sleep () و __wakeup ().

http://php.net/manual/en/language.oop5.magic.php.

نصائح أخرى

ملاحظة إلى الذات: تحقق مستندات أولا

http://www.php.net/manual/en/language.oop5.magic.php#language.oop5.magic.sleep.

نعم. القي نظرة على __sleep و __wakeup.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top