يجب أن يستخدم الكائن المستنسخ مقبض ملف واحد أو كل واحد له؟

StackOverflow https://stackoverflow.com/questions/2002742

  •  18-09-2019
  •  | 
  •  

سؤال

أنا أعمل على غلاف يقوم بتوزيع ملف بيانات لأداة ويب موجودة. ومع ذلك، فأنا أستخدم ملفات البيانات الكبيرة حتى لا يمكنني تحميل كل شيء في الذاكرة حتى لا بد لي من المشي من خلال تحميله في قطع صغيرة. تتوقع أداة الويب الحالية أن البيانات في نمط مشابهة ل SimpleXML ($ OBJ-> ParentNode-> endrendnode-> يقوم الطفل بإرجاع سلسلة أو كائن عقدة من نوع ما). لحسن الحظ، يشبه الهيكل XML ولكن بناء الجملة غريب. ولا أستطيع فقط ترجمة ذلك إلى تنسيق عاقل بسبب الظروف المخففة. لذلك لا بد لي من محاكاة ذلك على الطاير.

عندما أمشي عبر الملف، لن أحتاج إلى تحليل الشجرة بأكملها، فقط أسماء العقدة الفرعية للعقدة الحالية. سيتم تخزين كل اسم العقدة الفرعية والإزاحة المرتبطة في العقدة الأصل. إذا تم الوصول إلى محتويات العقدة الفرعية، فسيتم استنساخ كائن العقدة الأصل، وسيتم تحديث قيم الإزاحة وسيبدأ كائن العقدة الفرعية تحليل محتوىه حتى يجد الخط أدناه المطلوب.

الأسئلة التي لدي هي:

  • استنساخ كائن العقدة الأصل سيعطي الأطفال المتعلقين في الملفات. هل يجب أن تستخدم جميع الحيوانات المستنسخة نفس المقبض واستخدم FSEEK للقفز حول الملف إذا لزم الأمر (وهذا كبير جدا إذا)؟
  • هل أحتاج إلى إغلاق الملف؟ أو هل سيتم جمع القمامة في نهاية تنفيذ البرنامج النصي ما الأخطار التي أواجهها إذا لم أفعل؟
  • هل سأحتاج إلى إنشاء مقابض لكل استنساخ، أو يجب أن ألتصق بها مشاركة واحدة؟ إذا كان الأمر كذلك هل هناك حد أعلى؟
  • هل هناك طريقة للكائن المستنسخ لعقد إشارة إلى الكائن الأصلي؟ إذا كنت أضع المقبض بالقرب من Destructor للكائن، فربما يجب ألا أغلقه إذا كان الكائن استنساخ. والقدرة على تتبع صعودا قد يأتي في متناول يدي، ربما.
هل كانت مفيدة؟

المحلول

إذا قمت بتنفيذ __clone الطريقة التي يمكنك القيام بها كل ما تريد عند استنساخ كائن مثل إعداد خاصية خاصية أنه استنساخ أو إعداد خاصية تحمل الوالد.

تعديل:

public function __clone()
{
  $clone = clone $this;
  $clone->isCloned = true;
  $clone->parent = $this;
  $clone->resource = $this->resource; // i dont think resources are copied be default
  // additional property transference
  return $clone;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top