التحميل الزائد للطرق PHP Methods Overloading هو إنشاء طريقة/دالة بنفس إسم طريقة/دالة أخرى مع تغيير الوسائط، أما إذا تشابهت الوسائط تصبح تخطي للطرق PHP Methods Overriding وليس تحميل زائد. ولكن هذا التعريف هو التعريف المتعارف عليه في معظم لغات البرمجة ويكون شكل التحميل الزائد في هذه اللغات بهذا الشكل
class TEXT { public function display($parameter1) { print "Hello world!!"; } public function display($parameter1,$parameter2) { print "Hello friends!!"; } }لاحظ أنه تم عمل نفس الدالة بنفس الإسم ولكن بمتغيرات مختلفة، وهذا هو المقصود المنتشر بخصوص التحميل الزائد للطرق (نفس اسم الدالة بأي عدد من المتغيرات).
لكن إذا حاولت عمل نفس الشيء في بي إتش بي سيظهر خطأ فادح، ولكن هناك طريقة غير مباشرة لعمل ذلك، وبالتالي يختلف تعريف التحميل الزائد للطرق في بي إتش بي عن مثيلاتها من اللغات الأخرى، وسنقوم بتعريفه بالشكل المناسب ولكن بعد المثال التالي.
تخيل معي أن هناك طريقة/دالة تقوم بحساب مساحة الدائرة هكذا
<?php class TDshape { const Pi = 3.142 ; // constant value public function area($dia){ return self::Pi * pow($dia, 2); } } $circle = new TDshape(); echo $circle->area(5); ?>ولكن نريد أن تكون هذه الطريقة أكثر مرونة وتقبل أكثر من وظيفة، بحيث إذا تم تمرر وسيط واحد تقوم باحتساب مساجة الدائرة وإذا كانا اثنان يحسب مساحة المستطيل. لاحظ الكود التالي:
<?php class TDshape { const Pi = 3.142 ; // constant value function __call($fname, $argument){ if($name == 'area') switch(count($argument)){ case 0 : return 0 ; case 1 : return self::Pi * pow($argument[0], 2) ; case 2 : return $argument[0] * $argument[1]; } } } $circle = new TDshape(); echo "Area of circle:".$circle->area(5)."</br>"; // display the area of circle $rect = new TDshape(); echo "Area of rectangle:".$rect->area(5,10); // display area of rectangle ?>بما أنه لا يمكن تعريف دالة بنفس الإسم، فيمكننا الإعتماد على الطريقة السحرية call__، والتي تمكننا من الوصول للخصائص والطرق الغير معروفة والتي لا يمكن الوصول إليها.
وبالتالي عند استدعاء دالة تحمل إسم عشوائي وليكن area بها وسيط واحد، ستم استدعاء call__، ثم عند استدعاء نفس الدالة ولكن بوسائط أكثر سيتم أيضاً استدعاء call__، وهكذا.
لذلك في الكود السابق قمنا بالآتي:
في السطر رقم 4 قمنا ببناء الدالة call__ ثم في السطر 5 نتأكد من أن إسم الدالة هو area (حتى نحافظ على مبدأ التحميل الزائد ليتشابه مع باقي اللغات، وهو أن تكون دالة بنفس الإسم يمكن تعريفها أكثر من مرة بوسائط مختلفة) ثم بعد ذلك نقوم بتغيير وظيفة الدالة حسب عدد الوسائط. وفي النهاية قمنا ببناء كائن الفئة واستعدينا الدالة area مرتين، وفي كل مرة نغير عدد الوسائط نحصل على نتيجة مختلفة.وهنا يكون تعريف التحميل الزائد للطرق والخصائص في بي إتش بي، من المرجع الرسمي هنا، هو إنشاء الخصائص والطرق ديناميكياً عن طريق الطرق السحرية Magic Methods
فضلاً لاتتردد في ترك استفساراتك في التعليقات فهذا يسعدني ويشعرني بالتفاعل الذي يدفعني دائماً لتقديم كل ما في الإمكان لنشر معلومة قيمة
وفقنا الله وإياكم 🙂

