عوامل الإسناد في PHP

من موسوعة حسوب
< PHP

العامل "=" هو عامل الإسناد الأساسي. قد تظنّ للوهلة الأولى أن هذا العامل يعني "المساواة"، ولكنّه ليس كذلك. وظيفة هذا العامل هي ربط قيمة التعبير الموجود على جانبه الأيمن بالتعبير الموجود على الجانب الأيسر.

يأخذ تعبير الإسناد القيمة المسندة، بمعنى أن قيمة "‎$a = 3" هي 3، ويتيح لنا هذا القيام بأمور معقدة، في المثال التالي تساوي قيمة المتغير ‎$a العدد 9، وأخذ المتغير ‎$b القيمة 4:

<?php
$a = ($b = 4) + 5;
?>

إضافة إلى عامل الإسناد، هناك «عوامل مندمجة» (combined) لجميع العمليات الحسابية الخاصة بالأعداد الثنائية وتوحيد المصفوفات وعوامل السلاسل النصية، والتي تتيح استخدام قيمة التعبير ومن ثم تعيين نتيجة ذلك التعبير كقيمة له. مثال:

<?php

$a = 3;
$a +=5 // $a = 8
// $a = $a + 5
// تعطي نفس النتيجة
$b = "Hello ";

$b .= "There!"; // $b = "Hello There!";
// $b = $b . "There!"
// تعطي نفس النتيجة

?>

لاحظ أن عملية الإسناد تنسخ القيمة الأصلية إلى الجديدة (الإسناد بالقيمة)؛ لذا فإن تغيير إحدى القيم لا يؤثر على الأخرى إطلاقًا. وقد يكون هذا الأمر مفيدًا في بعض الحالات التي تحتاج فيها إلى نسخ مصفوفة كبيرة مثلًا إلى داخل حلقة صغيرة.

تستثنى الكائنات من عملية الإسناد بالقيمة في PHP 5 حيث تكون عملية الإسناد بالمرجعية، ويمكن نسخ الكائنات باستخدام الكلمة المفتاحية clone.

الإسناد بالمرجعية

يمكن إجراء عملية الإسناد بالمرجعية باستخدام الصيغة ‎"$var = &$othervar;‎"‎، وتعني عملية الإسناد هذه أن كلا المتغيرين يشيران إلى البيانات ذاتها، ولا تُنسخ المعلومات إلى أي مكان.

المثال 1: الإسناد بالمرجعية

سنسند في المثال الآتي المتغير ‎$a إلى ‎$b بالمرجعية، ثم سنُغيّر قيمة المتغير ‎$a إلى 4 وسنجد بعدئذٍ أنَّ قيمة المتغير ‎$b أصبحت 4 أيضًا:

<?php
$a = 3;
// $b هو مرجع للمتغير $a
$b = &$a;


print "$a\n"; // تطبع 3
print "$b\n"; // تطبع 3

$a = 4; // تغيير قيمة $a

print "$a\n"; // تطبع 4
print "$b\n"; // تطبع 4 أيضًا
?>

في الإصدار 5 وما بعده من PHP أصبحت القيمة المعادة من العامل new مرجعية بصورة تلقائية؛ لذا فإن الإسناد المرجعي للنتيجة المستحصلة من new ستؤدي إلى ظهور رسالة من نوع E_DEPRECATED في PHP 5.3 وما بعده، ورسالة من نوع E_STRICT في الإصدارات السابقة.

فعلى سبيل المثال، تؤدي الشيفرة التالية إلى ظهور رسالة تحذيرية:

<?php
class C {}

/* ستظهر رسالة الخطأ هذه من السطر التالي
* Deprecated: Assigning the return value of new by reference is deprecated in...
*/
$o = &new C;
?>

يمكن الحصول على المزيد من المعلومات حول المراجع وطرق استخدامها في قسم References ضمن هذا الدليل.

مصادر