بسم الله الرحمن الرحيم



السلام عليكم و رحمة الله و بركاته ,, لقد درسنا في الدرس السابق موضوع مهم و هو موضوع اعادة استخدام الكود و دوال ادراج الملفات و تعرفنا على الطريقة و الأخطاء التي تنتج و بإمكانك الإطلاع على الدرس السابق و باقي دروس الدورة عبر الفهرس التالي :




و دراسة موضوع الدرس السابق ستقودنا الى موضوع مهم جدا في البرمجة و هو الدوال functions حيث سنتعرف على الدوال و كيفية انشائها و كيفية استخدامها و مناداتها و سنتعرف على مدخلات الدوال (المعاملات , الباراميترز) و سنتعرف ايضا على ارجاع الدوال و القيم التي تعود منها و لنبدأ على بركة الله ,,,

مناداة الدوال functions call


على مدار الدروس السابقة تطرقنا الى مجموعة من الدوال مثل ()settype و ()include و ()require و غيرها الكثير و قد رأينا اننا عندما نريد منادة دالة فإننا نكتب كالتالي مثلا :

كود PHP:
<?php
    function_name
();
    
function_name(200);
    
function_name('zaed');
    
function_name($array);
    
function_name($var);
?>


و اعتقد ان طريقة مناداة الدوال اصبحت واضحة لكم

اخطاء في مناداة الدوال error in function call

في بعض الأحيان من الممكن ان ينسى المبرمج و يقوم بمناداة دالة غير معرفه في برنامجه او يكون قد اخطأ في اسم الدالة لذلك سينتج له خطأ مثل الصورة التالية :



و في هذه الحالة يجب التأكد ان اسم الدالة صحيح و يجب ايضا التأكد من ان اسم الدالة غير ممنوع من الإستخدام فمثلا لا يجوز تعريف دالة بإسم ()include لأنها موجودة اصلا في اساسيات لغة php

هنا يجب ان تعلم ايضا ان مناداة الدالة التي تقوم بإنشائها غير حساسة لحالة الأحرف فمثلا الدالة ()function_name هي نفسها ()Function_Name و هي نفسها ()FUNCTION_NAME و لكن عادة يقوم المبرمجين بإستخدام الحروف الصغيرة لتعريف و مناداة (استدعاء) الدوال و ايضا يجب ان تعلم ان الدوال لا يجوز ان تبدأ بأرقام او ان تكون معرفة مسبقا كما ذكرنا

لكن تذكر ان اسماء المتغيرات حساسة لحالة الأحرف فالمتغير var$ يختلف عن المتغير VAR$

انشاء و كتابة الدوال :

الآن سنقوم بتعلم انشاء الدوال و كتابتها و الصيغة العامة للدالة هي كالتالي :

كود PHP:
<?php
    
function func_name()
    {
        
// here code you want to do
    
}
?>


هنا تلاحظ اننا بدأنا بالكلمة function و هي كلمة محجوزة لتعريف دالة جديد ثم تبعها ()func_name و هذا هو اسم الدالة الذي تحدثنا عنه في السطور السابقة و ثم تبعها الأقواس {} و بينها نكتب الكود الذي نريد تنفيذه عند استدعاء الدالة و اذا اردنا استدعاء الدالة فإننا نكتب اسم الدالة بعد الدالة كالتالي :

كود PHP:
<?php
    
function func_name()
    {
        
// here code you want to do
    
}
    
    
func_name(); // call
?>


و الآن اليك المثال التالي لطباعة جملة معينة بإستخدام الدوال :

كود PHP:
<?php
    
function print_welcome_statment()
    {
        echo 
"<center><b><h1>Welcome to php functions with zaedo :D</h1></b></center>";
    }
    
    
print_welcome_statment();
?>


لاحظ هنا في السطر اننا قمنا بإستدعاء دالة و عند استدعائها سيذهب المترجم للبحث عن جسم الدالة و تنفيذه اي انه هنا سيطبع الجملة :
كود PHP:
Welcome to php functions with zaedo 


و بإمكانك مشاهدة الناتج عبر الرابط التالي :
http://www.al79n-php.info/less17/fun1.php

مدخلات الدوال :

عبر دراستنا للمواضيع السابقة في الدورة مر معنا دوال تحتاج الى مدخلات لتعمل بصورة صحيحة فمثلا الدالة ()require تحتاج الى مدخل وهو مسار الملف المراد ادراجه و إلا سينتج لنا خطأ ,, و هنا عند انشاء الدوال نستطيع ان نصنع دوال تأخذ مدخلات و الصيغة العامة لها كالتالي :

كود PHP:
<?php
    
function func_name($var)
    {
        
// here code you want to do
    
}
?>


حيث ان هذه الدالة كما تلاحظ تحتاج الى مدخل لإجراء عمليات عليه و الآن لاحظ المثال التالي و طريقة الإستدعاء :
كود PHP:
<?php
    
function print_variable($var)
    {
        echo 
$var ."<br/>";
    }
    
    
print_variable(10);
    
print_variable("zaed");
    
    
$x=15;
    
print_variable($x);
?>


كما تلاحظ انه تم تمرير الرقم 10 الى الدالة في الإستدعاء فيقوم المترجم بأخذ القيمة 10 و طباعتها حسب تنفيذ الدالة و في الإستدعاء الثاني تم تمرير نص للدالة حيث سيستقبلها جسم الدالة و يقوم بطباعتها و ايضا في الإستدعاء الثالث تم تمرير متغير يحمل قيمة 15 و سيستقبله جسم الدالة و يقوم بطباعته و بإمكانك مشاهدة الناتج عبر الرابط التالي :
http://www.al79n-php.info/less17/fun2.php

و ايضا بإمكانك جعل الدالة تستقبل عدد من المتغيرات الي اكثر من متغير مثلا الدالة ()mail مثلا فإنها تحتاج الى اكثر من مدخل لكي تعمل بالشكل الصحيح فمثلا لاحظ هذا المثال الذي يقوم بطباعة مجوع 3 ارقام بإستخدام الدوال :

كود PHP:
<?php
    
function sum($var1 $var2 $var3)
    {
        
$s $var1 $var2 $var3;
        echo 
"Sum is : ".$s."<br/>";
    }
    
    
sum(10 20 15);
    
    
$x=3;
    
$y=6;
    
$z=4;
    
sum($x $y $z);
?>


لاحظ هنا في هذا المثال اننا فصلنا بين مدخلات الدالة بالفاصلة (,) في جسم الدالة و في استدعاء الدالة
و ايضا عليك ان تلاحظ ان عدد المدخلات في جسم الدالة يجب ان يكون مساويا لعدد المدخلات في الإستدعاء لهذه الدالة و بإمكانك مشاهدة نتيجة تنفيذ هذا الكود عبر الرابط التالي :
http://www.al79n-php.info/less17/fun3.php

والآن لاحظ المثال التالي :

كود PHP:
<?php
    
function sum($var1 $var2 $var3=0)
    {
        
$s $var1 $var2 $var3;
        echo 
"Sum is : ".$s."<br/>";
    }
    
    
sum(10 20);
    
    
$x=3;
    
$y=6;
    
sum($x $y);
?>

سوف تلاحظ اننا جعلنا قيمة المتغير الثالث في جسم الدالة تساوي صفر و هذا يعني ان الصفر هو القيمة الإفتراضية اذا لم يتم تمرير قيمة للدالة في الإستدعاء نفذ ,, لاحظ في الإستدعاء اننا قمنا بتمرير قيمتين او متغيرين و لم نمرر القيمة الثالثة و في هذه الحالة سيأخذ القيمة الإفتراضية و هي صفر للقيمة الثالثة و بإمكانك مشاهدة الناتج من هنا :

http://www.al79n-php.info/less17/fun4.php

الآن لاحظ اننا نستطيع استخدام جمل الشرط و الدوران في الدوال من خلال المثال التالي :

كود PHP:
<?php
    
function compar($var1 $var2)
    {
        if(
$var1 == $var2)
        {
            echo 
"$var1 is equal $var2";
        }
        elseif(
$var1 $var2)
        {
            echo 
"$var1 greater than $var2";
        }
        else
        {
            echo 
"$var1 less than $var2";
        }
    }
    
    
// call by 1 and 2
    
compar(1,2);
    
    echo 
"<br/>";
    
    
// call by 100 and 85
    
$x 100;
    
$y 85;
    
compar($x,$y);
?>


و بإمكانك مشاهدة الناتج من هنا :
http://www.al79n-php.info/less17/comp.php

مخرجات الدوال و القيم الراجعة :

يوجد نوعين من القيم التي تخرج كنتيجة للدالة و هي ارجاع مخرجات من الدالة بإستخدام جملة طباعة او كود html و النوع الثاني و هو قيمة نرجعها لمكان الإستدعاء و النوع الأول يسمى void و الثاني returned

عندما لا تريد ارجاع قيمة من الدالة فإننا نقوم بالطباعة من داخل الدالة مثل المثال السابق

اما اذا اردنا ارجاع قيمة للدالة فإننا نستخدم الجملة return لاحظ معي هذا المثال و من ثم الشرح :

كود PHP:
<?php
    
function sum($v1 $v2)
    {
        
$s $v1 $v2;
        return 
$s;
    }
    
    
$result sum(3);
    echo 
$result."<br/>";
    
    echo 
sum(3,6) ."<br/>";
?>


هنا قمنا بتعريف دالة اسمها sum و تأخذ مدخلين و من ثم تقوم بجمع المدخلين و تخزين الناتج في s$ ثم تعيد قيمة الناتج المخزن في s$ الى مكان الإستدعاء بإستخدام الجملة return
لاحظ في الإستدعاء الأول اننا قمنا بتعريف متغير اسمه result$ لتخزين القيمة العائدة من الدالة و لم نكتب اسم الدالة مباشرة و بعد استقبال القيمة العائدة الى المتغير قمنا بطباعتها و في الإستدعاء الثاني قمنا بإستدعاء الدالة داخل جملة الطباعة لتعود القيمة الراجعة من الدالة الى مكان الإستدعاء داخل جملة الطباعة و ليس لوحدها كما في السابق
و بإمكانكم مشاهدة نتائج تنفيذ هذا الكود عبر الرابط التالي :
http://www.al79n-php.info/less17/ret.php


و بهذا اخواني نكون وصلنا الى نهاية درسنا اليوم الذي يعتبر نهاية المستوى المبتدئ من الدورة و الى ان القاكم في بداية المستوى المتوسط بعد عدة ايام لكم مني اجمل تحية

اخوكم : زيد مراد