كيف تحصل على التحميل الزائد بشكل أكثر شبها بلغة c#
ففي لغة C# يمكننا عمل ما يلي:
ففي لغة C# يمكننا عمل ما يلي:
// author: hishamdalal@gmail.com 2011 class person { private int ID; private string Name; public void Add(string ID, string Name) { this.ID = Convert.ToInt32(ID); this.Name = Name; } public person() { this.Add("0", "no name!"); } public person(string ID, string Name) { this.Add(ID, Name); } } students s = new students(); s.person(); // method without args s.person(1, "hisham"); // overload method with args
فكيف يمكننا فعل ذلك بواسطة php?
دعونا نتعرف على أحد الطرق السحرية "Magic Methods" هي "__call"
وظيفتها:
تقوم باستقبال اسم الدالة كوسيط أول ومتغيرات الدالة كوسيط ثاني على شكل مصفوفة يمكنك من خلالها عمل المعجزات
مثال:
دعونا نتعرف على أحد الطرق السحرية "Magic Methods" هي "__call"
وظيفتها:
تقوم باستقبال اسم الدالة كوسيط أول ومتغيرات الدالة كوسيط ثاني على شكل مصفوفة يمكنك من خلالها عمل المعجزات
مثال:
class a { function __call($name, $args){ echo "$name: <pre>"; print_r($args); } } $v = 'var'; $a = new a(); $a->writeAnyName(1, 'b', $v); // no limits for args
كما هو واضح يمكنك استدعاء دالة غير موجودة في الفئة "الكلاس"، وستتكفل الدالة السحرية بالعمل
قم بتجربة الكود السابق في السيرفر المحلي لديك أولا ثم تابع المقالة
قم بتجربة الكود السابق في السيرفر المحلي لديك أولا ثم تابع المقالة
سنقوم بعمل كلاس يمكننا من تقليد الدالة mumber_format الخاصة بتنسيق الارقام
string number_format ( float $number , int $decimals , string $dec_point , string $thousands_sep )
الفئة "الكلاس" الأب:
// Author: hishamdalal@gmail.com 2011 class obj { function __call($funcName, $args){ $count = count($args); if($count>0){ foreach($args as $arg){ $a[] = "'$arg'"; } $args = join(', ',$a); }else{ $args = $args[0]; } $fname = $funcName.'_'.$count; if(method_exists($this, $fname)){ eval("\$r = \$this->$fname($args);"); return $r; }else{ trigger_error('No overload method ['.$funcName.'] have '.$count.' args!', E_USER_ERROR);} } }
هذا هو الكلاس الاب، ويجب استخدام الوراثة لعمل "تجاوز الطرق" الخاص بك
سنقوم بعمل كلاس بإسم "int" الخاص بتنسيق الارقام
سنقوم بعمل كلاس بإسم "int" الخاص بتنسيق الارقام
// Author: hishamdalal@gmail.com 2011 class int extends obj{ private $val=0; function __construct($val){ $this-<val=$val; } function format_0(){ return number_format($this-<val); } function format_1($decimals){ return number_format($this-<val, $decimals); } function format_2($decimals, $dec_point){ return number_format($this-<val, $decimals, $dec_point, ' '); } function format_3($decimals, $dec_point, $thousands_sep){ return number_format($this-<val, $decimals, $dec_point, $thousands_sep); } }
لاحظ أنه يشترط ترقيم الطرق التي لها نفس الاسم، أعتقد أنه ليس من الصعب ترقيم الطرق
من المهم ترتيب الدوال بحسب عدد الوسائط "args" التي تأخذها الطريقة
فيجب ترقيم الدالة التي ليس لها وسائط بالرقم "0"، والدالة التي تأخذ وسيطين بالرقم "2" وهكذا...
من المهم ترتيب الدوال بحسب عدد الوسائط "args" التي تأخذها الطريقة
فيجب ترقيم الدالة التي ليس لها وسائط بالرقم "0"، والدالة التي تأخذ وسيطين بالرقم "2" وهكذا...
الاستخدام:
// Author: hishamdalal@gmail.com $int = new int(1234.56); echo $int-<format(); echo '\n'; echo $int-<format(2, '.'); echo '\n' echo $int-<format(2, '.', ','); echo '\n' echo $int-<format(3, ',', '.'); echo '\n' echo $int-<format(3, ',', '.', 100);
أخيراً، قم بتجريب الكود ويسعدني تعليقك على هذه المقالة
أرجو الاشارة الى المصدر عند نقل الشرح، أو استخدام الطريقة في مشاريعك، فهذه أمانة
هذا المثال تم باستخدام اصدارة PHP Version 6.0.0-dev
أرجو الاشارة الى المصدر عند نقل الشرح، أو استخدام الطريقة في مشاريعك، فهذه أمانة
هذا المثال تم باستخدام اصدارة PHP Version 6.0.0-dev
0 تعليقات:
إرسال تعليق