يحتوي PHP4 بالفعل على بناء جملة للتحميل الزائد لإنشاء تعيينات لنماذج الكائنات الخارجية، تمامًا مثل Java وCOM. يوفر PHP5 تحميلًا زائدًا قويًا موجهًا للكائنات، مما يسمح للمبرمجين بإنشاء سلوكيات مخصصة للوصول إلى الخصائص وأساليب الاتصال.
يمكن إجراء التحميل الزائد من خلال عدة طرق خاصة __get، __set و __call عندما يحاول محرك Zend الوصول إلى عضو ولا يتمكن من العثور عليه، ستقوم PHP باستدعاء هذه الأساليب
في المثال الموضح في الشكل 1، حيث يستبدل __get و __set كل الوصول إلى مصفوفة من متغيرات السمات، ويمكنك ذلك إذا لزم الأمر تنفيذ أي نوع من التصفية التي تريدها، على سبيل المثال، يمكن للبرنامج النصي تعطيل تعيين قيم السمات، أو البدء ببادئة معينة أو تضمين نوع معين من القيمة.
يوضح الأسلوب __call كيف يمكنك استدعاء أسلوب غير محدد ، سيتم تمرير اسم الطريقة والمعلمات التي تستقبلها الطريقة إلى طريقة __call، وتقوم PHP بتمرير قيمة __call مرة أخرى إلى الطريقة غير المحددة
للتحميل الزائد على مستوى المستخدم
<?php
محمل الطبقة الزائد
{
خصائص $ خاصة = صفيف ()؛
وظيفة __get($property_name)
{
إذا (إيسيت($this->خصائص[$property_name]))
{
return($this->properties[$property_name]);
}
آخر
{
return(NULL);
}
}
الدالة __set($property_name, $value)
{
$this->properties[$property_name] = $value;
}
وظيفة __call($function_name, $args)
{
print("استدعاء $function_name()n");
طباعة("الوسائط:");
print_r($args
return(TRUE);
}
}
$o = new Overloader();
// استدعاء __set() يعين قيمة لمتغير سمة غير موجود وينشط __set()
$o->dynaProp = "المحتوى الديناميكي";
//استدعاء __get() تنشيط __get();
print($o->dynaProp . "n");
//استدعاء __call() تنشيط __call()
$o->dynaMethod("ليون", "Zeev");
?>
التحميل التلقائي للفئات
عندما تحاول استخدام فئة غير محددة، ستبلغ PHP عن خطأ فادح. الحل هو إضافة فئة، والتي يمكن تضمينها في ملف، ومع ذلك، فأنت تعرف الفئة التي يجب استخدامها يوفر وظيفة تحميل تلقائية للفئات، والتي يمكن أن توفر وقت البرمجة. عند محاولة استخدام فئة لم تنظمها PHP، فإنها ستبحث عن وظيفة عامة __autoload. إذا كانت هذه الوظيفة موجودة، فسوف تستدعيها PHP باستخدام المعلمة المعلمة هي اسم الفئة.
يوضح المثال في الشكل 2 كيفية استخدام __autoload، ويفترض أن كل ملف في الدليل الحالي يتوافق مع فئة يتم تعريف فئة المستخدم في class_User.php بغض النظر عما إذا كان الاستدعاء مكتوبًا بأحرف كبيرة أو صغيرة، فسوف يُرجع PHP الاسم الصغير
الذي يتم تحميله تلقائيًا
<?php
// تحديد وظيفة التحميل التلقائي
وظيفة __التحميل التلقائي(فئة $)
{
include("class_" . ucfirst($class) . ".php");
}
// استخدم فئة يجب تحميلها تلقائيًا
$u = مستخدم جديد؛
$u->name = "ليون";
$u->printName();
?>