PHP và tài liệu tham khảo có phần không trực quan. Nếu được sử dụng các tài liệu tham khảo phù hợp ở đúng nơi có thể cung cấp các cải tiến hiệu suất lớn hoặc tránh các cách giải quyết rất xấu và mã bất thường.
Sau đây sẽ tạo ra một lỗi:
function f(&$v){$v = true;}
f(&$v);
function f($v){$v = true;}
f(&$v);
Không ai trong số này phải thất bại vì họ có thể tuân theo các quy tắc dưới đây nhưng không nghi ngờ gì đã bị xóa hoặc vô hiệu hóa để ngăn chặn nhiều sự nhầm lẫn di sản.
Nếu chúng đã hoạt động, cả hai đều liên quan đến chuyển đổi dự phòng sang tham chiếu và lần thứ hai cũng liên quan đến chuyển đổi dự phòng trở lại biến chứa trong phạm vi.
Cái thứ hai được sử dụng có thể cho phép một tham chiếu được chuyển đến mã không có ý định làm việc với các tham chiếu. Điều này là cực kỳ xấu cho khả năng bảo trì.
Điều này sẽ không làm gì:
function f($v){$v = true;}
$r = &$v;
f($r);
Cụ thể hơn, nó biến tham chiếu trở lại thành một biến bình thường khi bạn không yêu cầu tham chiếu.
Điều này sẽ làm việc:
function f(&$v){$v = true;}
f($v);
Điều này thấy rằng bạn đang chuyển một tham chiếu nhưng muốn tham chiếu nên biến nó thành một tham chiếu.
Điều này có nghĩa là bạn không thể chuyển tham chiếu đến một hàm trong đó tham chiếu không được yêu cầu rõ ràng để làm cho nó trở thành một trong số ít các lĩnh vực mà PHP nghiêm ngặt trong việc chuyển các loại hoặc trong trường hợp này là loại meta hơn.
Nếu bạn cần hành vi năng động hơn, nó sẽ hoạt động:
function f(&$v){$v = true;}
$v = array(false,false,false);
$r = &$v[1];
f($r);
Ở đây nó thấy rằng bạn muốn có một tài liệu tham khảo và đã có một tài liệu tham khảo vì vậy hãy để nó một mình. Nó cũng có thể chuỗi tham chiếu nhưng tôi nghi ngờ điều này.