• php
  • 1667
  • 20-3-2008
  • من المعروف أنه عند تعريفك لدالة معينة فإنك ربما تستخدم عدد معين
    من الباراميترات مع الدالة أو ربما لا تستخدم أي باراميتر أي أن الدالة
    لا تحتوي على باراميترات ... والمقصود بالبارميترات هي المتغيرات التي تأتي بين قوسي الدالة عند تعريفها ومثال على ذلك
    <?php
    function myData($a,$wyc,$xyz)
    {
    //do somthing here
    }
    ?>

    فكما تلاحظ فإن كلاً من a, wyc, xyz هي عبارة عن متغيرات عادية ولكن
    كونها أتت بين قوسي الدالة أثناء تعريفها فيطلق عليها باراميترات أو
    ارجيومينت .. لو نظرنا إلى الدالة myData في الأعلى فإنه عند إستدعاء الدالة يجب أن
    نعبئ الثلاث بارميترات الخاصة بالدالة أي يجب أن نكتب
    <?php
    myData(1,'welcome',true);
    ?>

    ولكن إذا كتبت شيئاً مثل :
    <?php
    myData();
    ?>

    وسنستثني هنا الباراميترات الإفتراضية ... فعندها سيصدر المترجم الخاص باللغة تحذيراً على كل متغير (باراميتر) للدالة لم يتم وضع قيمة له
    وهنا لم يتم وضع قيم للثلاثة بارميترات وعندها سيصدر لك شئ مثل :
    Warning: Missing argument 1 for myData() in c:\wamp\www\demo.php on line 3
    Warning: Missing argument 2 for myData() in c:\wamp\www\demo.php on line 3
    Warning: Missing argument 3 for myData() in c:\wamp\www\demo.php on line 3
    وإذا كتبت مثلاً
    <?php
    myData(1024);
    ?>
    سيعطيك رسالتين تحذير لأنه بقي باراميترين ... وهكذا .. درسنا هذا سيغطي موضوع التعرف على البارميترات واستخدامها ومعرفة عددها أثناء تنفيذ الدالة وإستدعائها وعندها نستطيع أن نعمل
    دالة تستخدم عدد غير محدد من البارميترات دون أن نكتب أي باراميتر للدالة الأساسية أثناء تعريفها .. كيف ذلك ؟ تابع معنا
    سنقوم بتعريف دالة بإسم mySwalif وهذه الدالة تستطيع أن تتعامل مع أي عدد من البارميترات دون تحديد مسبق .. كيف ؟ هنالك الكثير من الدوال للتعامل مع الدوال وهنا سنتعامل مع دالتين مهمة وهي : 1- func_num_args
    2- func_get_arg سيأتي شرحها في الأسفل .. الآن سنعرف دالة عادية mySwalif لطباعة كلمة swalif كالتالي :
    <?php function mySwalif()
    {
    echo 'swalif';
    }

    ?>
    وعند الإستدعاء سنكتب
    <?php
    mySwalif();
    ?>

    عندها سيكون كل شئ على مايرام ... ولكن لو .....
    <?php
    mySwalif('anystring');
    ?>

    فإن مترجم php سيصدر رسالة مفادها ان دالة mySwalif ليس لها بارميترات .. وهذا مانخشاه .. إذا كيف سنحول دالة mySwalif إلى دالة تستطيع أن تقبل أي عدد من البارميترات التي يمررها المستخدم عند إستدعاء الدالة ؟ الجواب هو بإستخدام دالتي func_num_args و func_get_arg و للتحذير فإن هذه الدالتين لا تستخدم إلا من داخل الدالة التي تعرفها أي لا تستطيع إستخدام الدالتين مباشرة ضمن الملف أي يجب أن تكتب
    الدالتين داخل دالة أثناء تعريفها ... بالنسبة للدالة func_num_args وظيفتها أنها تقوم بإرجاع عدد البارميترات التي مررها المستخدم للدالة
    أما بالنسبة للدالة func_get_arg ووظيفتها هي احد البارميترات التي مررها المستخدم للدالة وذلك بتحديد رقم الباراميتر الذي تريده
    وأول بارميتر يكون من الرقم 0 صفر .. وللتوضيح لاحظ المثال التالي الذي سيجعل دالة mySwalif تقبل أي عدد من البارميترات كالتالي :
    <?php
    function mySwalif()
    {
    $num_args = func_num_args(); //هنا سترجع الدالة عدد البارميترات التي مررها المستخدم للدالة
    for($i = 0; $i < $num_args; $i++)
    {
    $param = func_get_arg($i); //هنا ستحضر قيمة البارميتر الأول ومن ثم الثاني وهكذا
    echo '<b>'.$param.'</b><br/>';
    }
    }
    ?>

    الآن بإمكاني كتابة مايلي بدون مشاكل
    <?php

    mySwalif();
    mySwalif('welcome');
    mySwalif('welcome','to');
    mySwalif('welcome','to','swalif');
    mySwalif('welcome','to','swalif',2007); ?>

    وأرجوا أن تكون الفكرة قد اتضحت ...
    وهذا مالدي الآن فإن أخطأت فمن نفسي والشيطان وإن أصبت فمن الله عز وجل ... الكاتب عبدالله عيد
    كن أول من يقيم الموضوع
    12345