Murls Murls
 
   التحميل الزائد للدوال overload function في بي اتش بي فائدته وكيفية بناءه...


بسم الله الرحمن الرحيم

الصلاة والسلام على اشرف المرسلين نبينا محمد صلى الله عليه وسلم

في هذه المقالة ساتطرق الى مفهوم التحميل الزائد للدوال اي مايسمى

overload

ماهو التحميل الزائد وهل تدعم حاليا بي اتش بي التحميل الزائد

اولا ان لغة بي اتش بي الحالية لاتدعم مميزة التحميل الزائد للدالات function

كا هو الحال مع اللغات الاخرى

ماهو التحميل الزائد هو استخدام نفس اسم الدالة والتصريح عنها ولكن بعدد بارمترات مختلفة دون

ادني معارضة او خطا ما

ويكون لكل واحدة منها تصرف ما بحسب مايريد المبرمج استخدامه

اي مثال


 

    
function oveload($a,$b){

    return 
$a+$b;

    

    }

    echo 
oveload(5,7);



     




المثال الاخر


 

    
function oveload($a,$b,$c){

    return 
$a-$b-$c;



    }



    echo 
oveload(2,5,3);

     





الى الان يعمل لنجمع الكودين معا






 

     
function oveload($a,$b){

    return 
$a+$b;

    }

    function 
oveload($a,$b,$c){

    return 
$a-$b-$c;

     




سيخبرك مترجم لغة بي اتش بي

انه لايستطيع اعادة الاعلان عن الدالة مرة اخرى في مثالنا اعطى مترجم اللغة هذا الخطا


 

     Fatal error
Cannot redeclare oveload() (previously declared in     



نلاحظ من نوع الخطا انه خطا قاتل اي يقوم بايقاف الكود كامل


 

     Fatal error




ماهي فائدة التحميل الزائد

هيا استخدام نفس الاسم ولكن ببرامترات مختلفة

ويمكنك التوسع حتى تحديد نوع البارمترات

وانجاز مهام بحسب النوع

طبعا يتبادر في ذهنك سؤال وما الفائدة منها

الفائدة هي تسميات والتوضيحات للدالة وهذا يوفر عناء اختيار اسماء اخرى للدوال

الفائدة الاخرى

التعامل مع كل نوع حسب نوعه باتمام مهمة

معينة تختلف عن الاخرى

وهذا بحسب افكار المبرمج

الان كيفية انشاء كود برمجي لهذه الفكرة

صبعا هنا نستخدم الدالة المهمولة والمسكينة التي ليس لها تعامل الا نادرا الا وهيا


 

     create_function     




هذه الدالة تقوم بانشاء دالة

تاخذ بارمترين نصيين

الاول تعتبره بارمترات الدالة والثاني هو جسم الدالة مثال


 

     create_function
('$a,$b','return $a+$b;');

     




طبعا لو تلاحظ ان البارمترات نصية

كما ذكرت ان الدالة تاخذ نصوص اي محصورة باعلامات الاقتباس

ثانيا الدالة


 

     func_num_args
();

     




عدد البارمترات المقدمة لهذه الدالة


 

     func_get_args     




البارمترات المقدمة على شكل مصفوفة

ولمزيد من المعلومات حول هذه الدوال راجع الصفحة التالية

http://dwal.biz/info-article-5.html



الكود


 

     
function overload(){

    
$e=func_num_args();//عدد البارمترات

        
$args=func_get_args();// الحصول على البارمترات كمصفوفة لاستخدامها لاحقا



    
if ($e==2) {//التحقق من عدد البارمترات

    
$newfunc create_function('$a,$b','return $a+$b;');//انشاء دالة بموجب الدالة

        
return $newfunc($args[0],$args[1]);//اعادة قيمة الدالة

    
}

    if (
$e==4) {

    
$newfunc create_function('$a,$b,$c,$d','return $a-$b-$c-$d;');

    return 
$newfunc($args[0],$args[1],$args[2],$args[3]);

    }



    }



    echo 
overload(10,2,5,2);//استدعاء الدالة

    
echo overload(10,2);//استدعاء الدالة



    




كما تلاحظون ان الكود سهل وبسيط

وكلها افكار تركيبة

ولكن القوة تكمن في التحكم بانواع البارمترات

نقوم الان باستخدام دالة


 

     gettype
($args[0])

     




وهيا تعيد نوع المتغيير

من ضمن القائمة التالية

"boolean" (since PHP 4)



"integer" #رقم عشري

"double" #رقم طويل

"float" # ذو فاصلة عشرية

"string" # نص

"array" #مصفوفة

"object" #classاو object

"resource" # مصدر

"NULL" (since PHP 4)#لاشيء

"user function" (PHP 3 only, deprecated)# دالة

"unknown type" # غير معروف

او يمكنك مباشرة


 

    is_array
()

    
is_bool() 

    
is_float()

    
is_int() 

    
is_null() 

    
is_numeric()

    
is_object()

    
is_resource()

    
is_scalar()

    
is_string() 

    



نفس الشيء

الكود


 

        
function overload(){



    
$e=func_num_args();//عدد البارمترات

    
$args=func_get_args();// الحصول على البارمترات كمصفوفة لاستخدامها لاحقا



    
if ($e==and gettype($args[0])=="string" /* الفرق هنا */) {//التحقق من عدد البارمترات

    

    
$newfunc create_function('$a,$b''return $a.$b;');//انشاء دالة بموجب الدالة

    
return $newfunc($args[0],$args[1]);//اعادة قيمة الدالة

    
}

    if (
$e==2) {//التحقق من عدد البارمترات

    
$newfunc create_function('$a,$b''return $a.$b;');//انشاء دالة بموجب الدالة

    
return $newfunc($args[0],$args[1]);//اعادة قيمة الدالة

    
}



    if (
$e==4) {

    
$newfunc create_function('$a,$b,$c,$d''return $a-$b-$c-$d;');

    return 
$newfunc($args[0],$args[1],$args[2],$args[3]);

    }



    }

    

    echo 
overload('10',5);//استدعاء الدالة 

    

    




نلاحظ انه لم يتم جمع المتغيرين بل قام بالتعامل معهما على انهما نص

هذه هيا ابسط الافكار

ويمكنك التشعب لتغطي كل الاحتمالات التي تريد دون الحاجة الى اختراع اسماء جديدة

طبعا ولو نلاحظ الحاجة لها هيا

سيتم ادراج


 

     namespace 

     






في بي اتش بي 5.3

فمافوق

هذا والله اعلم العالمين

وقل ربي زدني علما

وبالتوفيق للجميع


حرر في تاريخ 2010/04/01 الساعة 11:14:16