إذا كان يمكننا تمرير القيم للدوال بالمرجعية ( Passing By Reference ) , يمكننا أيضاً استعادة المراجع من الدوال . ويتم ذلك بإضافة ( & ) قبل اسم الدالة.
<?php function &myfunc() { // code here } ?>وعند استعادة المرجع وتخصيصه لمتغير ( PHP Variables ) يجب التخصيص بالمرجعية ( &= ) وإلا فأنت تقوم بتخصيص القيمة وليس المرجع.
مثال :
<?php $num = 10; function &getnum () { global $num; return $num; } $numRef = &getnum(); $numRef--; echo "\$num = $num<br>"; // Display "9" echo "\$numRef = $numRef"; // Display "9" ?>شرح الكود :
1 – تقوم الدالة ()getnum بجلب المتغير num$ باستخدام ( global ) التي تقوم بعمل مرجع للمتغير. ثم استعادته فقط باستخدام ( PHP Return )
2 – قمنا بتخصيص مرجع للدالة للمتغير numRef$ باستخدام علامة المرجع ( & ).
3 – ثم طبقنا معامل النقصان ( – – ) على القيمة التي يشير إليها المتغير numRef$.
4 – ثم طلبنا طباعة كلاً من num$ و numRef$ . وستكون النتيجة ” 9 ” لكل منهما.
[button title=”تجربة الكود” link=”https://makiomar.com/php_example/returning_references/returning_references.php” target=”_blank” size=”” color=”” class=””]
أما إذا لم تقم بوضع علامة ( & ) عند تخصيص الدلة لمتغير فأنت في هذه الحالة تقوم بتخصيص القيمة الناتجة عن الدالة فقط ولكن لن تؤثر على المتغير الأصلى الذي تريد تغيير قيمته.
عامة لن تقوم باستخدام استعادة المرجع ( Returning Reference ) كثيراً كما هو الحال في تمرير الوسائط بالمرجعية ( Passing By Referenece ). لكن يمكن أن تكون مفيدة في حالات معينة , فإنك مثلاً قد تريد كتابة دالة ( PHP Function ) تقوم بالبحث عن متغير ما , ثم استعادة مرجع لهذا المتغير لكي تتمكن من التلاعب بقيمة هذا المتغير.