تعريف دالة بداخل دالة

المقصود بتعريف دالة داخل دالة هو أن تقوم بكتابة تعريف لدالة معينة وبداخل هذا التعريف تنشئ تعريف أخر لدالة أخرى ...

الآن افترض أنك تقوم بإستدعاء دالة بإسم myfunc وهذه الدالة ليس لها تعريف كالتالي :

Code:

<?php
myfunc();
?>



فإن المترجم سيصدر خطأ لعدم وجود تعريف للدالة ...

الآن لو قمنا بكتابة مايلي :

Code:
<?php
function myfunc()
{
// do somthing...
}
?>



فالآن لو ..


Code:
<?php
myfunc();
?>



فإن الأمور ستسير على مايرام والسبب أن مترجم php استطاع التعرف على الدالة من خلال التعريف الذي ذكرناه ..


الآن لاحظ مايلي :


Code:
<?php
function foo()
{
function bar()
{
echo "I don't exist until foo() is called.n";
}
}

?>


هذا مانقصد به تعريف دالة داخل دالة فلقد عرفنا دالة بإسم foo وعرفنا بداخلها دالة بإسم bar ..

ولكن هنا مشكلة للتوضيح ..

الآن مترجم php يعلم فقط بوجود الدالة foo فقط أي لو كتبت ما يلي :


Code:
<?php
bar();
?>



فإنه سيصدر خطأ يخبرك فيه أن الدالة bar غير معرفة !!!

إذا كيف أستخدم الدالة bar ؟

في حقيقة الآمر سيتم التعرف على الدالة bar في حال استدعيت الدالة foo فقط كالتالي :

Code:
<?php
foo();
?>



الآن عندما نفذ مترجم php هذه الدالة فإنه وجد بداخلها تعريف لدالة أخرى وعندها سيتعرف على الدالةbar التي بداخل foo ويجعلها متاحة للإستخدام...

أي بكلام أخر لا تستطيع إستدعاء الدالة التي بالداخل(bar) حتى تستدعي الدالة التي تحتويها (foo)(الدالة التي بالخارج) ..
فالآن لو عملنا التالي ..

Code:
<?php
bar();
?>



فإن الأمور ستسير على مايرام ...

وإليك المثال بالكامل ...


Code:
<?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();

?>




وأرجوا أن تكون الفكرة قد اتضحت ...

وهذا مالدي الآن فإن أخطأت فمن نفسي والشيطان وإن أصبت فمن الله عز وجل ...




    

لا يمكنك اضافة تعليق

يجب عليك تسجيل الدخول لاضافة تعليقك




كلمات مفتاحية : تعريف دالة بداخل دالة


أضف الدرس الى موقعك