التحميل الزائد للدوال 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==2 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
فمافوق
هذا والله اعلم العالمين
وقل ربي زدني علما
وبالتوفيق للجميع
|