القوة الحقيقية لـ PHP تأتي من خلال الدوال.
تحتوي PHP على أكثر من 1000 دالة مدمجة ، بالإضافة إلى أنه يمكنك إنشاء اي دالة مخصصة.
والدوال فى لغة PHP تشبه لغات البرمجة الأخرى. حيث أن الدالة عبارة عن جزء من الكود يأخذ بعض المدخلات ويقوم ببعض المعالجة ويعيد قيمة.
من أمثلة الدوال المعرفة فى لغة PHP هى fopen() و fread() وهى دوال مدمجة فى لغة PHP تقوم الاولى بفتح ملف والأخرى تقوم بقراءة هذا الملف.
التعامل مع الدوال يأتى فى شكلين :
- أنشاء دالة
- نداء الدالة
أنشاء الدوال فى لغة PHP
الشكل العام لأنشاء الدوال فى لغة PHP هو كالتالى :
function functionName() { code to be executed; }
ننتقل لأنشاء دالة تقوم بوظيفة بسيطة على سبيل المثال طباعة عبارة بسيطة فى المتصفح.
المعاملات للدوال فى PHP
يمكنك تمرير اي عدد من القيم للدوال على شكل معاملات, وهذه المعاملات للدالة تعمل كمتغيرات داخل الدالة, لننتقل لمثال عملى على هذا لنقل أنك تحتاج إلى بناء دالة بسيطة تقوم بجمع رقمين, ستحتاج إلى إنشاء معاملين وليكن x و y وتقوم بجمعهم وأعادة الناتج, انظر المثال التالى
لاحظ انه فى المثال السابق لم نخبر PHP ان المتغيرات هى من النوع int اي ارقام صحيحة وذلك لان لغة PHP تنمى إلى اللغات اللى يتم التعامل مع المتغيرات بدون تحديد نوعها عند أعلانها.
ولكن فيما يخص الدوال ففى الأصدار السابع من PHP وهو PHP 7.0 فتم أضافة أمكانية أعلان نوع المعامل بمعنى أنه فى المثال السابق يمكن كتابته كالتالى :
لاحظ فى المثال السابق أننا مررنا 5 و '10' حيث '10' هو نص String وليس رقم.
فى المثال السابق فى حالة هناك حالتين :
فى الحالة العادية ستقوم PHP بأعتبار النص '10' اتوماتيكيًا بأنه int وقيمته 10.
فى الحالة Strict ستقوم PHP بألقاء خطأ لعدم تطابق نوع البيانات المعرف فى الدالة وهو int $y مع القيمة المررة للدالة وهى النص '10'.
يمكنك أعلان الحالة Strict إضافة اول سطر فى الكود كالتالى :
declare(strict_types=1);
القيم الأفتراضية لمعاملات الدوال فى PHP
فى لغة PHP يمكنك تعين قيم أفتراضية للمعاملات حيث يتم إستخدام هذه القيم الإفتراضية فى حالة عدم تمرير قيم عند نداء الدالة.
لاحظ فى المثال السابق عند عدم تمرير قيمة المعامل سيتم إستخدام القيمة الإفتراضية وهى 50 فى هذه الحالة.
العودة return فى لغة PHP
فى كل الأمثلة السابقة أفتراضنا أننا نريد طباعة النتاج من الدوال. ولكن حالات أخرى أفترض أننا لا نريد طباعة الناتج مباشرتًا وانما نحصل على قيمة الدالة فى متغير لإجراء المزيد من العمليات عليه داخل الكود أنظر المثال التالى.
لاحظ فى المثال السابق أننا قمنا بالحصول على العائد من الدالة داخل المتغير $sum ويمكنك أن تفعل ما تشاء بهذا المتغير الجديد. حيث يمكنك طباعته أو أجراء المزيد من العمليات عليه.
تمرير المعاملات عن طريق المرجع Reference
من الأشياء المهمة التى عليك فهمها فى لغة PHP أنها تدعم التعامل مع المتغير عن طريق المرجع by reference. وهذا يعنى أنه سيتم التعامل مع المتغير نفسه داخل الدالة وليس نسخة منه كما يحدث فى الحالة العادية أنظر المثال التالى لتفهم أكثر
فى المثال السابق نلاحظ ما يأتى أنه عند إستخدام تمرير المعاملات عن طريق المرجع Reference أن القيمة الأصلية تغيرت للقيمة الجديدة وهى 16 فى هذه الحالة. لان تمرير المعاملات عن طريق المرجع تتم كل العمليات داخل الدالة الأصلية على المتغير الأصلى وليس نسخة منه.