Giới thiệu
Trong PHP, các đối tượng được truyền bởi các tham chiếu theo mặc định. Ở đây, tham chiếu là một bí danh, cho phép hai biến khác nhau ghi vào cùng một giá trị. Một biến đối tượng không chứa chính đối tượng dưới dạng giá trị. Nó chỉ chứa một mã định danh đối tượng cho phép sử dụng đối tượng thực tế được tìm thấy. Khi một đối tượng được gửi bằng đối số, trả về hoặc được gán, các biến khác nhau không phải là bí danh - thay vào đó, chúng giữ một bản sao của mã định danh, trỏ đến cùng một đối tượng.
Ví dụ
PHP có spl_object_hash () hàm trả về ID băm duy nhất của một đối tượng. Trong đoạn mã sau, hai biến đối tượng, tham chiếu đến cùng một đối tượng trả về cùng một ID
Ví dụ
<?php class test1{ public $name; } $obj1=new test1(); echo "ID of obj1: " . spl_object_hash($obj1) . "\n"; $obj2=$obj1; echo "ID of obj2: " . spl_object_hash($obj2); ?>
Đầu ra
Kết quả cho thấy ID của cả hai biến đều giống nhau
ID of obj1: 000000004355dda6000000006f04b1a7 ID of obj2: 000000004355dda6000000006f04b1a7
Khi chúng tôi tạo một tham chiếu của một biến đối tượng, bằng cách thêm tiền tố và đặt tên, bất kỳ thay đổi nào trong các thuộc tính sẽ tự động được phản ánh trong biến tham chiếu
Ví dụ
<?php class test1{ public $name; } $obj1=new test1(); echo "ID of obj1: " . spl_object_hash($obj1) . "\n"; $obj2=&$obj1; echo "ID of obj2: " . spl_object_hash($obj2) . "\n"; $obj1->name="Amar"; echo "name: " .$obj2->name; ?>
Đầu ra
Đoạn mã trên bây giờ trả về tên sau kết quả đầu ra
ID of obj1: 00000000163cf0b8000000003ad0ed93 ID of obj2: 00000000163cf0b8000000003ad0ed93 name: Amar