إعادة القيم في PHP

من موسوعة حسوب
< PHP
(بالتحويل من PHP/Functions/returning-values)

يمكن إعادة القيم باستخدام عبارة return الاختيارية، ويمكن إعادة أيّ نوع من أنواع القيم ومن ضمنها المصفوفات والكائنات. يؤدي استخدام هذه العبارة إلى إيقاف تنفيذ الدالة فورًا والعودة إلى السطر الذي استدعيت منه تلك الدالة. راجع return للمزيد من المعلومات.

ملاحظة: إن لم تُستخدم العبارة return فإنّ الدالة تعيد القيمة NULL.

استخدام return

المثال 1: استخدام عبارة return

<?php
function square($num)
{
    return $num * $num;
}
echo square(4);   // outputs '16'.
?>

لا يمكن للدالة أن تعيد قيمًا متعدّدة، ولكن يمكن الحصول على نتائج مشابهة وذلك بإعادة مصفوفة من الدالة.

المثال 2: إعادة مصفوفة من الدالة للحصول على قيم متعدّدة

<?php
function small_numbers()
{
    return array (0, 1, 2);
}
list ($zero, $one, $two) = small_numbers();
?>

لإعادة مرجع من الدالة، يمكن استخدام المعامل & عند التصريح عن الدالة وعند إسناد القيمة المعادة إلى متغير:

المثال 3: إعادة مرجعية من دالة

<?php
function &returns_reference()
{
    return $someref;
}

$newref =& returns_reference();
?>

للمزيد من المعلومات حول المراجع، يرجى مراجعة فصل توضيح المراجع.

التصريحات من نوع return

يدعم الإصدار السابع من اللغة التصريحات من نوع return، وكما هو الحال في التصريحات من نوع argument فإن هذا النوع من التصريحات يحدّد نوع القيمة التي ستعيدها الدالة. جميع الأنواع المتاحة في التصريحات من نوع argument متاحة في التصريحات من نوع return.

يؤثر الوضع الصارم strict على التصريحات من نوع return. تحوّل القيم المعادة في الوضع الضعيف قسرًا إلى النوع الصحيح إن لم تكن كذلك، أما في الوضع الصارم فإنّ القيم المعادة يجب أن تكون من النوع الصحيح وفيما عدا ذلك سيُطلق خطأ من نوع TypeError.

ملاحظة: عند تجاوز التابع الأب، يجب أن تتطابق التوابع الأبناء مع أي تصريح من نوع return في التابع الأب. وإن لم يعرّف التابع الأب نوع الإعادة، فيمكن للتابع الابن أن يقوم بذلك.

أمثلة

المثال 4: تصريح من نوع return بسيط

<?php
function sum($a, $b): float {
    return $a + $b;
}
// لاحظ أن القيمة المرجعة هي من نوع الأعداد العشرية
var_dump(sum(1, 2));
?>

تعطي الشيفرة السابقة المخرجات التالية:

float(3)

المثال 5: تفعيل الوضع الصارم

<?php
declare(strict_types=1);

function sum($a, $b): int {
    return $a + $b;
}

var_dump(sum(1, 2));
var_dump(sum(1, 2.5));
?>

يعطي المثال أعلاه المخرجات التالية:

int(3)

Fatal error: Uncaught TypeError: Return value of sum() must be of the type integer, float returned in - on line 5 in -:5
Stack trace:
#0 -(9): sum(1, 2.5)
#1 {main}
  thrown in - on line 5

المثال 6: إعادة كائن

<?php
class C {}

function getC(): C {
    return new C;
}

var_dump(getC());
?>
يعطي المثال أعلاه النتيجة التالية:

object(C)#1 (0) {
}

مصادر