English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا الدرس، ستتعلم كيفية إنشاء وظائف مخصصة في PHP.
الوظائف هي أجزاء مستقلة من الكود لتنفيذ مهام محددة
يحتوي PHP على مجموعة كبيرة من الوظائف المدمجة التي يمكنك تفعيلها مباشرة في سكربت PHP الخاص بك للتنفيذ مهام محددة مثل: gettype()،print_r()،var_dump، إلخ.
انظر إلى جزء PHP Reference للحصول على قائمة كاملة من الوظائف المدمجة في PHP.
بالإضافة إلى الوظائف المدمجة، يسمح PHP بتعريف وظائفك الخاصة. هذا هو طريقة لإنشاء حزم من الكود القابل للتكرار لتنفيذ مهام محددة، ويمكن حفظها وتصيانتها منفصلة عن البرنامج الرئيسي. إليك بعض المزايا التي تأتي مع استخدام الوظائف:
تقلل من تكرار الكود في البرنامج - تسمح الوظائف بجمع الكود المكرر في عنصر واحد. الآن، يمكنك تنفيذ نفس المهمة في أي مكان في السكربت من خلال استدعاء هذه الوظيفة، دون الحاجة إلى نسخ ولصق الكود المكرر مرارًا وتكرارًا.
تجعل الوظائف صيانة الكود أسهل - نظرًا لأن إنشاء وظيفة يمكن تكراره عدة مرات، فإن أي تغيير يتم إجراؤه داخل الوظيفة سيتم تنفيذه تلقائيًا في جميع الأماكن دون الحاجة إلى تعديل عدة ملفات.
يمكن القضاء على الأخطاء بسهولة أكبر من خلال الوظائف - عند تقسيم البرنامج إلى وظائف، إذا حدث خطأ، ستكون على علم بالوظيفة التي أدت إلى الخطأ وكيفية العثور عليها. لذا، يصبح إصلاح الخطأ أسهل بكثير.
يمكن تكرار استخدام الوظائف في تطبيقات أخرى - نظرًا لأن الدوال معزولة عن باقي جزء البرنامج، يمكن تكرار استخدام نفس الوظيفة في تطبيقات أخرى بسهولة من خلال تضمين ملف PHP يحتوي على هذه الدوال.
في الفصل التالي، سنعرض لك كيفية تعريف دوالك الخاصة بسهولة في PHP.
النحو الأساسي لإنشاء دالة مخصصة يمكن تقديمه كالتالي:
function functionName(){ //كود سيتم تنفيذه }
بداية إعلان الدالة المحددة من قبل المستخدم تبدأ بكلمة function، ثم اسم الدالة الذي تريد إنشاؤها، ثم الدوائر الكاملة، ثم وضع الكود بين الدوائر { }.
هذا مثال بسيط على الدالة المحددة من قبل المستخدم، حيث يظهر تاريخ اليوم:
<?php //تحديد الدالة function whatIsToday(){ echo "اليوم هو " . date('l', mktime()); } // دعوة الدالة whatIsToday(); ؟>تجربة ل‹/›
ملاحظة:يجب أن تبدأ اسم الدالة بحرف أو رمز خط أسفل، وليس بالرقم، ويمكن أيضًا إضافة أحرف وأرقام ورموز خط أسفل أخرى بعد ذلك، واسم الدالة لا يفرق بين الحروف الكبيرة والصغيرة.
يمكنك تحديد المتغيرات عند تعريف الدالة لتلقي القيم في الوقت الفعلي. يعمل المتغير مثل متغيرات الحكم في الدالة؛ يتم استبدالها بالقيم التي يتم تقديمها إلى الدالة عند التطبيق (تسمى المعلمات).
function myFunc($oneParameter, $anotherParameter){ //كود سيتم تنفيذه }
يمكنك تعريف متغيرات متعددة حسب الحاجة. ولكن، يجب تقديم كل متغير مسبقًا عند استدعاء الدالة.
في هذا المثال، ستجد دالة getSum() التي تأخذ إثنين من القيم الصحيحة كمعلمات، وتضيفها فقط، ثم تظهر النتيجة في المتصفح.
<?php //تحديد الدالة function getSum($num1, $num2){ $sum = $num1 + $num2; echo "مجموع الرقمين $num1 و $num2 هو: $sum"; } // دعوة الدالة getSum(10, 20); ؟>تجربة ل‹/›
الناتج من الكود أعلاه سيكون:
مجموع الرقمين 10 و 20 هو: 30
نصيحة:المتغير هو القيمة التي تمررها إلى الدالة، والمتغير هو المتغير الذي يستلم القيمة في الدالة. ولكن، في الاستخدام العادي، يمكن تبادل هذه المصطلحات، أي أن المتغير هو المتغير المتغير.
يمكنك أيضًا إنشاء دالة تحتوي على متغيرات إضافية - فقط أضف اسم المتغير، ثم إشارة تساوي (=)، ثم القيمة الافتراضية، مثل ما يلي.
<?php //تحديد الدالة function customFont($font, $size=1.5){ echo "<p style="font-family: $font; font-size: {$size}em;">مرحباً بالعالم!</p>"; } // دعوة الدالة customFont("Arial", 2); customFont("Times", 3); customFont("Courier"); ؟>تجربة ل‹/›
كما ترون، لم يكن هناك ثاني معامل في الدعوة الثالثة لـ customFont(). هذا سيفشل محرك PHP في استخدام قيمة المعامل الافتراضية لـ $size، وهي 1.5.
يمكن للدالة استخدام جملة return لتحويل القيمة إلى السكربت الذي دعته.
<?php //تحديد الدالة function getSum($num1, $num2){ $total = $num1 + $num2; return $total; } // طباعة القيمة العائدة echo getSum(5, 10); // الناتج: 15 ؟>تجربة ل‹/›
لا يمكن أن تعود الدالة عدة قيم. ولكن يمكنك الحصول على نتيجة مشابهة عن طريق العودة بنوع مجموعة، مثل المثال التالي.
<?php //تحديد الدالة function divideNumbers($dividend, $divisor){ $quotient = $dividend / $divisor; $array = array($dividend, $divisor, $quotient); return $array; } // تخصيص المتغيرات كعدد list($dividend, $divisor, $quotient) = divideNumbers(10, 2); echo $dividend; // الناتج: 10 echo $divisor; // الناتج: 2 echo $quotient; // الناتج: 5 ؟>تجربة ل‹/›
في PHP، هناك طريقتان لنقل المعاملات إلى الدالة: بنقل القيمة وباستخدام الإشارة. بالافتراض، يتم نقل المعاملات بنقل القيمة، لذا إذا تم تغيير قيمة المعامل في الدالة، فإن ذلك لن يؤثر على القيمة في الخارج. ولكن، إذا كان من الممكن تغيير المعامل، فإنه يجب نقلها باستخدام الإشارة.
طريقة نقل المعاملات باستخدام الإشارة (&) هي إضافة الإشارة إلى اسم المعامل في تعريف الدالة، مثل المثال التالي:
<?php /* يحدد دالة لمضاعفة الرقم */ ويعود القيمة الجديدة */ function selfMultiply(&$number){ $number *= $number; return $number; } $mynum = 5; echo $mynum; // outputs: 5 selfMultiply($mynum); echo $mynum; // outputs: 25 ؟>تجربة ل‹/›
يمكنك إعلان المتغيرات في أي مكان في سكربت بايثون. ومع ذلك، يحدد المكان الذي تم فيه الإعلان من حيث يمكن استخدام أو الوصول إلى المتغير في برنامج بايثون، والذي يُدعىمجال المتغير.
بالتجربة، تكون المتغيرات المعلنة داخل الدالة متغيرات محلية، ولا يمكن الوصول إليها أو معالجتها من خارج الدالة، كما هو موضح في المثال التالي:
<?php //تحديد الدالة function test(){ $greet = "Hello World!"; echo $greet; } test(); // outputs: Hello World! echo $greet; // produces undefined variable error ؟>تجربة ل‹/›
بالمثل، إذا حاولت الوصول إلى أو استيراد متغير خارجي من داخل الدالة، فستحصل على خطأ في المتغير غير المحدد، كما هو موضح في المثال التالي:
<?php $greet = "Hello World!"; //تحديد الدالة function test(){ echo $greet; } test(); // generates undefined variable error echo $greet; // outputs: Hello World! ؟>تجربة ل‹/›
من الممكن رؤية من خلال المثال السابق أن المتغيرات المعلنة داخل الدالة غير قابلة للوصول إليها من الخارج، وكذلك فإنه لا يمكن الوصول إلى المتغيرات المعلنة خارج الدالة داخل الدالة. يقلل هذا التمييز من فرص تأثير المتغيرات في البرنامج الرئيسي على المتغيرات داخل الدالة.
نصيحة:يمكنك استخدام نفس الاسم للمعلمات في الدوال المختلفة، لأن المعلمات المحلية يمكن تمييزها فقط من قبل الدالة التي تم إعلامها.
في بعض الحالات، قد تحتاج إلى إدخال متغيرات البرنامج الرئيسي إلى الدالة، والعكس صحيح. في هذه الحالة، يمكنك استخدام كلمة المفتاح global قبل متغيرات الدالة. ستقوم هذه الكلمة المفتاحية بتحويل المتغير إلى متغير عالمي، مما يجعله مرئيًا أو قابلاً للوصول إليه داخل الدالة والخارج منها، كما هو موضح في المثال التالي:
<?php $greet = "Hello World!"; //تحديد الدالة function test(){ global $greet; echo $greet; } test(); // outputs: Hello World! echo $greet; // outputs: Hello World! //تعيين القيمة الجديدة للمعلمة $greet = "Goodbye"; test(); // outputs: Goodbye echo $greet; // outputs: Goodbye ؟>تجربة ل‹/›
ستتعلم فيفئات واشياء بايثونللحصول على معلومات إضافية حول التوفر والتحكم في الوصول، راجع الفصل.
الدالة المكررة هي دالة تُدعى نفسها مرارًا وتكرارًا حتى تتحقق الشروط. تُستخدم الدوال المكررة عادةً لحل الحسابات الرياضية المعقدة أو معالجة الهياكل المدمجة بشكل عميق، مثل، طباعة جميع عناصر مصفوفة مدمجة.
النموذج التوضيحي التالي يظهر كيف يعمل الدالة المكررة.
<?php //تعريف دالة متكررة function printValues($arr) { global $count; global $items; //تحقق من whether $arr is an array if(!is_array($arr)){ die("ERROR: Input is not an array"); } /* يتم استدعاء الدالة المتكررة إذا كانت القيمة herself مجموعة يضيف الدالة القيم الموجودة إلى مجموعة العناصر الصادرة، زيادة معدة العدادات لكل قيمة عثر عليها */ foreach($arr as $a){ if(is_array($a)){ printValues($a); } else { $items[] = $a; $count++; } } //إرجاع عدد العناصر في المجموعة و القيم return array('total' => $count, 'values' => $items); } //تعريف المجموعات المتداخلة $species = array( "birds" => array( "نسر" "قرد الديك" "فلامنغو" ), "mammals" => array( "بشر" "cat" => array( "لونغ" "تمساح" "نمر" ), "فيل" "قرد" ), "reptiles" => array( "snake" => array( "Cobra" => array( "عظمة الملك" "Cobra المصرية" ), "Viper", "Anaconda" ), "Crocodile", "Dinosaur" => array( "T-rex", "Alamosaurus" ); ); ); //حساب وتسجيل القيم الموجودة في المجموعات المتداخلة $result = printValues($species); echo $result['total'] . ' value(s) found: '; echo implode(', ', $result['values']); ؟>تجربة ل‹/›
ملاحظة:لا تدع الحذر ينعدم عند إنشاء وظائف متكررة، لأن كتابة الكود بشكل غير صحيح قد يؤدي إلى دورة متكررة لا نهائية في استدعاء الوظيفة.