في الشيفرة المقدمة، يظهر لنا كلاس بإسم “book” ويحتوي على دالة عامة تحمل اسم “set”، وتستقبل هذه الدالة متغيرًا وتقوم بتمريره إلى دالة أخرى تدعى “newvar”. الهدف هو إنشاء متغير جديد داخل الكلاس باستخدام الدالة “set”.
لنقم بتعديل الشيفرة لتحقيق الهدف المطلوب:
-
تفاعل فعّال وتنظيم مميز في تطبيقات Ember.js20/01/2024
-
تسهيل تنفيذ البروتوكولات في Xcode28/01/2024
-
تكامل UIScrollView الأفقي في تطبيق iOS06/02/2024
phpclass Book {
// قم بتعريف خاصية (property) لحفظ البيانات داخل الكلاس
private $data = array();
// دالة لتعيين قيمة المتغير داخل الكلاس
public function set($name) {
$this->newvar($name);
}
// دالة لإنشاء متغير داخل الكلاس
private function newvar($name) {
// تعيين قيمة افتراضية للمتغير إذا لم يتم تحديده
$this->data[$name] = '';
// استخدام دالة ماجيك __set لتعيين قيمة المتغير
$this->$name = & $this->data[$name];
}
}
// استخدام الكلاس
$x = new Book();
$x->set('title');
$x->title = 'Jack';
echo 'عنوان الكتاب هو: ' . $x->title;
echo '
-----------------------------
';
$x->set('writer');
$x->writer = 'Tom';
echo 'كاتب الكتاب هو: ' . $x->writer;
في هذا السياق، تمت إضافة خاصية data
إلى الكلاس لتخزين البيانات الفعلية، وتم تعديل دالة newvar
لتعيين قيم المتغيرات داخل الكلاس. يتم استخدام دالة ماجيك __set
لتعيين قيم المتغيرات بمرونة. يظهر الناتج المتوقع الذي تم توضيحه في نهاية الشيفرة.
المزيد من المعلومات
بالطبع، دعنا نستكمل شرح الشيفرة ونقدم بعض المعلومات الإضافية:
-
الخصائص الخاصة (
private $data
)- تم إستخدام خاصية
data
لتخزين البيانات داخل الكلاسBook
. يتم تعريفها باعتبارها خاصة (private
) لتكون مقصورة داخل الكلاس ولا تكون متاحة للاستخدام من خارجه.
- تم إستخدام خاصية
-
الدوال (
public function set
وprivate function newvar
)- الدالة
set
تستقبل اسم المتغير وتقوم بتنفيذ دالةnewvar
لإعداد المتغير داخل الكلاس. - الدالة
newvar
تأخذ اسم المتغير وتقوم بتعيين قيمة افتراضية له داخل خاصيةdata
، ثم تستخدم دالة__set
لربط المتغير بالقيمة داخلdata
.
- الدالة
-
التعديلات على الاستخدام (
$this->$name = & $this->data[$name];
)- تم استخدام
&
لربط المتغير بالقيمة المخزنة فيdata
بدلاً من إنشاء نسخة جديدة، مما يتيح للمتغير أن يتغير تلقائيًا عندما يتم تغيير قيمته فيdata
.
- تم استخدام
-
الاستخدام الفعلي (
$x->title = 'Jack';
و$x->writer = 'Tom';
)- بعد تنفيذ
set
، يمكنك تعيين قيم للمتغيرات بشكل مباشر كما هو موضح في الأمثلة ($x->title = 'Jack';
و$x->writer = 'Tom';
)، وستكون هذه القيم مرتبطة مباشرة بالمتغيرات داخل الكلاس.
- بعد تنفيذ
-
الإخراج المتوقع
- يُتوقع أن يظهر في الإخراج النهائي “عنوان الكتاب هو: Jack” و”كاتب الكتاب هو: Tom”.
باختصار، الشيفرة المعدلة تسمح لك بإنشاء متغيرات داخل الكلاس Book
باستخدام دالة set
وتعيين قيم لها بشكل مباشر، وتستخدم آلية داخلية لربط هذه المتغيرات بالقيم المخزنة داخل الكلاس بشكل آلي.