Hướng dẫn pass by value and pass by reference php - chuyển theo giá trị và chuyển bằng tham chiếu php
TL; DR: PHP hỗ trợ cả vượt qua giá trị và vượt qua tham chiếu. Các tài liệu tham khảo được khai báo bằng cách sử dụng ampers và ( Show
Đối với bất kỳ ai bắt gặp điều này trong tương lai, tôi muốn chia sẻ viên đá quý này từ các tài liệu PHP, được đăng bởi một người dùng ẩn danh:
Và đây là ví dụ họ cung cấp:
Tôi đã viết một bài đăng trên blog chi tiết, chi tiết về chủ đề này cho JavaScript, nhưng tôi tin rằng nó áp dụng tốt như nhau cho PHP, C ++ và bất kỳ ngôn ngữ nào khác mà mọi người dường như bị nhầm lẫn về việc vượt qua giá trị so với việc vượt qua. Rõ ràng, PHP, giống như C ++, là một ngôn ngữ hỗ trợ vượt qua tham chiếu. Theo mặc định, các đối tượng được truyền bởi giá trị. Khi làm việc với các biến lưu trữ các đối tượng, nó giúp xem các biến đó là con trỏ (vì đó là cơ bản những gì chúng là, ở cấp độ lắp ráp). Nếu bạn vượt qua một con trỏ theo giá trị, bạn vẫn có thể "theo dõi" con trỏ và sửa đổi các thuộc tính của đối tượng được chỉ ra. Những gì bạn không thể làm là có nó chỉ vào một đối tượng khác. Chỉ khi bạn khai báo rõ ràng một tham số được thông qua bởi tham chiếu, bạn mới có thể làm điều đó. Trong bài viết này, chúng tôi sẽ tìm hiểu về vượt qua giá trị và vượt qua bằng cách tham khảo trong PHP. & NBSP; Bây giờ, hãy để hiểu chi tiết hai khái niệm này. Trong PHP nói chung, chúng tôi đã làm theo để chuyển các đối số cho hàm với cách tiếp cận giá trị được truyền. Chúng tôi đang tuân theo thực tiễn này bởi vì nếu giá trị của đối số trong hàm được thay đổi, nó không bị thay đổi bên ngoài hàm. Trong một số trường hợp, chúng ta có thể cần sửa đổi các đối số chức năng, vì vậy để cho phép một hàm sửa đổi các đối số của nó, chúng phải được truyền bằng cách tham chiếu. Hãy bắt đầu bằng việc được thông qua bởi tham chiếu. Vì nó đã được đề cập, chúng tôi có thể chuyển một biến bằng cách tham chiếu đến một hàm để hàm có thể sửa đổi biến. Để bắt đầu quá trình truyền các tham số được truyền qua tham chiếu, hãy dành cho một ampersand và) cho tên đối số trong định nghĩa hàm. Thí dụHãy kiểm tra điều này với một ví dụ đơn giản. Đầu ra6 Giải trìnhỞ đây chúng tôi đã khai báo biến $ a và chuyển nó dưới dạng thông qua tham chiếu đến hàm tính toán (). Vì vậy, như nguyên tắc nói rằng nếu giá trị của $ a được thay đổi bên trong hàm thì nó cũng sẽ thay đổi bên ngoài hàm. Ghi chúKhông có dấu hiệu tham chiếu trên một cuộc gọi chức năng - chỉ trên các định nghĩa chức năng. Định nghĩa chức năng một mình là đủ để vượt qua chính xác đối số bằng cách tham khảo. Điều này không được dùng trong phiên bản 5.4 của PHP khi bạn sử dụng để tính toán (& $ a); Nó ném một lỗi. Thí dụHãy kiểm tra điều này với một ví dụ đơn giản. "; } $a=5; calculate($a); echo $a; ?> Đầu ra6 5 Giải trìnhỞ đây chúng tôi đã khai báo biến $ a và chuyển nó dưới dạng thông qua tham chiếu đến hàm tính toán (). Vì vậy, như nguyên tắc nói rằng nếu giá trị của $ a được thay đổi bên trong hàm thì nó cũng sẽ thay đổi bên ngoài hàm.
Ghi chú
Sự khác biệt giữa truyền qua giá trị và truyền qua tham chiếu trong PHP là gì?Truyền bằng giá trị đề cập đến một cơ chế sao chép giá trị tham số chức năng sang biến khác trong khi vượt qua tham chiếu đề cập đến một cơ chế truyền các tham số thực tế cho hàm. Do đó, đây là sự khác biệt chính giữa vượt qua giá trị và vượt qua tham chiếu.
Sự khác biệt giữa truyền qua giá trị và vượt qua tham chiếu là gì?Pass by giá trị: Các giá trị tham số phương thức được sao chép vào một biến khác và sau đó đối tượng được sao chép được truyền, đó là lý do tại sao nó được gọi là Pass by giá trị. Truyền qua tham chiếu: Một bí danh hoặc tham chiếu đến tham số thực tế được chuyển đến phương thức, đó là lý do tại sao nó được gọi là Pass by tham chiếu.
Thông qua giá trị là gì và vượt qua tham chiếu với ví dụ?"Chuyển bằng giá trị" có nghĩa là bạn chuyển giá trị thực của biến vào hàm. Vì vậy, trong ví dụ của bạn, nó sẽ vượt qua giá trị 9. "Truyền bằng tham chiếu" có nghĩa là bạn chuyển biến chính vào hàm (không chỉ là giá trị). Vì vậy, trong ví dụ của bạn, nó sẽ vượt qua một đối tượng số nguyên với giá trị 9.. So, in your example, it would pass the value 9. "Passing by reference" means that you pass the variable itself into the function (not just the value). So, in your example, it would pass an integer object with the value of 9.
Sự khác biệt giữa cuộc gọi theo giá trị và cuộc gọi bằng tham chiếu trong PHP là gì?Trong trường hợp gọi theo giá trị, khi chúng ta chuyển giá trị của tham số trong quá trình gọi hàm, nó sao chép chúng vào đối số cục bộ thực tế của hàm.Trong trường hợp gọi bằng tham chiếu, khi chúng tôi chuyển tham chiếu/địa chỉ vị trí của tham số, nó sao chép và gán chúng cho đối số cục bộ của hàm. |