الفرق بين المراجعتين لصفحة: «PHP/objects references»
< PHP
ط استبدال النص - '\[\[تصنيف:(.*)\]\]' ب'{{SUBPAGENAME}}' |
ط نقل عبد اللطيف ايمش صفحة PHP/OOP/references إلى PHP/objects references: إعادة هيكلة التوثيق |
(لا فرق)
|
المراجعة الحالية بتاريخ 03:50، 4 أبريل 2018
غالبًا ما ترد العبارة التالية كثيرًا عند الحديث عن البرمجة كائنية التوجّه في PHP 5: "تمرّر الكائنات بالمرجعية بصورة افتراضية". هذه العبارة ليست صحيحة تمامًا، وسيصحّح هذا القسم هذه الفكرة العامة بالاستعانة ببعض الأمثلة.
المرجع في PHP هو اختصار يتيح لمتغيرين مختلفين الكتابة إلى القيمة ذاتها. ومنذ الإصدار الخامس من اللغة، لم يعد متغير الكائن يتضمّن الكائن نفسه كقيمة على الإطلاق، بل يتضمّن فقط معرّفًا للكائن يتيح الوصول إلى الكائن الحقيقي. وعند تمرير الكائن كمعامل أو إعادته أو إسناده إلى متغير آخر، لا تكون هذه المتغيرات أسماء بديلة (aliases) بل تحمل نسخة من المعرّف الذي يشير إلى الكائن نفسه.
المثال 1: المراجع والكائنات
<?php
class A {
public $foo = 1;
}
$a = new A;
$b = $a; // نسخ من نفس المعرِّف
// ($a) = ($b) = <id>
$b->foo = 2;
echo $a->foo."\n";
$c = new A;
$d = &$c; // كلاهما معرِّفان
// ($c,$d) = <id>
$d->foo = 2;
echo $c->foo."\n";
$e = new A;
function foo($obj) {
// ($obj) = ($e) = <id>
$obj->foo = 2;
}
foo($e);
echo $e->foo."\n";
?>
يعطي المثال السابق الشيفرة التالية:
2
2
2