[PHP core] Object và References

Trước hết, xin phép mình sẽ dùng Tiếng Anh cho những từ như object, references ,.. bởi nghĩa tương đương của nó trong tiếng Việt (như đối tượng, tham chiếu... ) sẽ dễ gây hiểu nhầm. Mỗi ngôn ngữ có cách định nghĩa của riêng mình, tham chiếu trong php không giống tham chiếu trong C++,... Nên mình cố gắng giữ nguyên từ để đảm bảo mọi người không hiểu nhầm và có thể đánh giá PHP là ngôn ngữ "cùi bắp" vì một số điều không đáng có.

Một trong những điểm trong PHP OOP (từ PHP 5) thường được đề cập là "object được gán bằng references một cách mặc định".

Như các bạn đã biết, references trong PHP không chỏ tới địa chỉ ô nhớ, references trong PHP có thể coi là 1 alias, nó cho phép 2 biến ghi tới cùng một giá trị.

Kể từ PHP 5, 1 biến object không chứng chính object đó làm giá trị nữa. Mà nó chỉ chứa 1 object identifier cho phép trình truy cập object tìm thấy object thực sự. Khi 1 object được truyền vào tham số, return hoặc gán cho 1 biến, thì biến đó không phải là alias (hay references) mà giá trị của nó là bản copy của object identifier được truyền vào,tất nhiên object identifier đó cũng chỏ tới actual object trong bộ nhớ.

Vậy trước giờ khi dùng phép gán:

$a =& $b;

nhiều người đã hiểu sai đây là phép gán "tham chiếu" khi so sánh nó với các ngôn ngữ khác chỏ tới cùng 1 địa chỉ ô nhớ thực chất đây chỉ là phép tạo alias. Tham chiếu theo cách thông thường các bạn nghĩ, phải là như thế này :

$a = new Foo;

Lúc này $a là tham chiếu ( pointer ) hay nói theo cách PHP $a chứa object identifier tới object Foo vừa được khởi tạo trong bộ nhớ.