• php
  • 2043
  • 20-3-2008
  • المقصود بتعريف دالة داخل دالة هو أن تقوم بكتابة تعريف لدالة معينة وبداخل هذا التعريف تنشئ تعريف أخر لدالة أخرى ... الآن افترض أنك تقوم بإستدعاء دالة بإسم myfunc وهذه الدالة ليس لها تعريف كالتالي :
    <?php
    myfunc();
    ?>
    فإن المترجم سيصدر خطأ لعدم وجود تعريف للدالة ... الآن لو قمنا بكتابة مايلي :
    <?php
    function myfunc()
    {
    // do somthing...
    }
    ?>

    فالآن لو ..
    <?php
    myfunc();
    ?>

    فإن الأمور ستسير على مايرام والسبب أن مترجم php استطاع التعرف على الدالة من خلال التعريف الذي ذكرناه ..
    الآن لاحظ مايلي :
    <?php
    function foo()
    {
    function bar()
    {
    echo "I don't exist until foo() is called.\n";
    }
    } ?>
    هذا مانقصد به تعريف دالة داخل دالة فلقد عرفنا دالة بإسم foo وعرفنا بداخلها دالة بإسم bar .. ولكن هنا مشكلة للتوضيح .. الآن مترجم php يعلم فقط بوجود الدالة foo فقط أي لو كتبت ما يلي :
    <?php
    bar();
    ?>

    فإنه سيصدر خطأ يخبرك فيه أن الدالة bar غير معرفة !!! إذا كيف أستخدم الدالة bar ؟ في حقيقة الآمر سيتم التعرف على الدالة bar في حال استدعيت الدالة foo فقط كالتالي :
    <?php
    foo();
    ?>

    الآن عندما نفذ مترجم php هذه الدالة فإنه وجد بداخلها تعريف لدالة أخرى وعندها سيتعرف على الدالةbar التي بداخل foo ويجعلها متاحة للإستخدام... أي بكلام أخر لا تستطيع إستدعاء الدالة التي بالداخل(bar) حتى تستدعي الدالة التي تحتويها (foo)(الدالة التي بالخارج) ..
    فالآن لو عملنا التالي ..
    <?php
    bar();
    ?>
    فإن الأمور ستسير على مايرام ... وإليك المثال بالكامل ...
    <?php
    function foo()
    {
    function bar()
    {
    echo "I don't exist until foo() is called.\n";
    }
    } /* We can't call bar() yet
    since it doesn't exist. */ foo(); /* Now we can call bar(),
    foo()'s processesing has
    made it accessible. */ bar(); ?>

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