Toán tử gán tham chiếu trong PHP, = &


Câu trả lời:


121

Nó không bị phản đối và có thể sẽ không. Đó là cách tiêu chuẩn để, ví dụ, thực hiện một phần của một mảng hoặc đối tượng phản chiếu các thay đổi được thực hiện sang một mảng khác, thay vì sao chép dữ liệu hiện có.

Nó được gọi là gán bằng tham chiếu , mà, để trích dẫn hướng dẫn sử dụng, "có nghĩa là cả hai biến đều trỏ đến cùng một dữ liệu và không có gì được sao chép ở bất kỳ đâu" .

Điều duy nhất không được chấp nhận =&là "gán kết quả newbằng tham chiếu" trong PHP 5 , điều này có thể là nguồn gốc của bất kỳ sự nhầm lẫn nào. newđược tự động gán bằng tham chiếu, do đó, &là dư thừa / không được chấp nhận trong $o = &new C;, nhưng không được dùng trong $o = &$c;.


Vì khó tìm kiếm, hãy lưu ý rằng =&( dấu bằng và ) giống với = &( dấu bằng và dấu cách ) và thường được viết sao cho nó chạy vào biến khác như $x = &$y['z'];hoặc $x = &$someVar( tên biến dấu bằng và dấu đô la ). Ví dụ được đơn giản hóa từ tài liệu:

$a = 3;
$b = &$a;
$a = 4;
print "$b"; // prints 4

Đây là một liên kết hữu ích đến phần chi tiết về Chỉ định Bằng Tham chiếu trong sổ tay PHP . Trang đó là một phần của loạt bài về tài liệu tham khảo - bạn nên dành một phút để đọc toàn bộ.


8
ghi chú bên lề re: "vì rất khó tìm kiếm" : Symbolhound.com là bạn của bạn cho những thứ như thế này.
billynoah

1
@billynoah Chà! Symbolhound hiện đã được thêm vĩnh viễn vào hộp công cụ của tôi.
Parapluie

26

Đó là hai toán tử khác nhau. =là nhiệm vụ như bạn có thể biết. Và &có nghĩa là biến nên được truy cập bằng tham chiếu chứ không phải theo giá trị.


60
Tôi xin lỗi nhưng cách này quá đơn giản. $ a = & $ b có nghĩa là làm cho biến $ a tham chiếu đến cùng một điều mà $ b hiện đang làm. Sau đó, $ a = 5; cũng sẽ dẫn đến $ b có 5. Tuy nhiên, liên kết tham chiếu có thể bị phá vỡ bởi $ b = & $ xyz; hoặc không đặt ($ b); Tại thời điểm đó $ a sẽ là biến duy nhất biết vị trí ô chứa số 5. ​​Ngoài ra, hãy lưu ý rằng nếu bạn đặt $ a bằng cách sử dụng = &, bạn phải sử dụng = & lần sau (hoặc bỏ đặt ($ a)) để thay đổi liên kết tham chiếu của $ a, cụ thể là $ a = NULL; sẽ không phá vỡ liên kết, nó chỉ thay thế số 5 bằng null;
Don

8
@Don: Cảm ơn vì đã xây dựng. Tôi có thể nói bạn là một lập trình viên C.
Asaph

8
Tôi thứ hai những gì Don nói. Nhưng tôi sẽ không nói đây là cách quá đơn giản. Tôi muốn nói rằng điều này là sai.
Artefacto

@ Bạn thực sự nên đăng bình luận của bạn như một câu trả lời.
Adam

6
$x = &$y['z'];

cũng có tác dụng tạo $y['z']nếu nó không tồn tại và đặt nó thànhnull .

Điều này ngăn các thông báo lỗi mà bạn có thể muốn đọc. Tôi chưa tìm thấy tài liệu về điều này; có thể mới trong 5.3, cho tất cả những gì tôi biết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.