Bạn có nên chuyển qua tham chiếu trong php không?

Khi nói đến tham chiếu, mọi thứ trở nên phức tạp hơn một chút - bạn cần có khả năng chấp nhận tham số theo tham chiếu và cũng trả về giá trị theo tham chiếu. Điều này được thực hiện với toán tử tham chiếu, &

Việc đánh dấu một biến là "được chuyển bởi tham chiếu" được thực hiện trong định nghĩa hàm, không phải trong lệnh gọi hàm. Đó là

function multiply[&$num1, &$num2] {

là đúng, trong khi

$mynum = multiply[&5, &10];

sai. Điều này có nghĩa là nếu bạn có một hàm được sử dụng hàng trăm [hàng nghìn?] lần trong dự án của mình, bạn chỉ cần chỉnh sửa định nghĩa hàm để làm cho nó nhận các biến theo tham chiếu. Chuyển qua tham chiếu thường là một cách hay để làm cho tập lệnh của bạn ngắn hơn và dễ đọc hơn - lựa chọn không phải lúc nào cũng dựa trên các cân nhắc về hiệu suất. Hãy xem xét mã này


Ví dụ đầu tiên chuyển một bản sao của $val vào, nhân bản sao đó, sau đó trả về kết quả sau đó được sao chép lại vào $val. Ví dụ thứ hai chuyển $val vào theo tham chiếu và nó được sửa đổi trực tiếp bên trong hàm - do đó tại sao square2[$val];

Một điều quan trọng cần nhớ là một tham chiếu là một tham chiếu đến một biến. Nếu bạn định nghĩa một hàm là chấp nhận một tham chiếu đến một biến, thì bạn không thể truyền một hằng số vào đó. Nghĩa là, với định nghĩa của chúng ta về square2[], bạn không thể gọi hàm bằng cách sử dụng square2[10];, vì 10 không phải là một biến, vì vậy nó không thể được coi là một tham chiếu

Bạn muốn học PHP 7?

Hacking with PHP đã được cập nhật đầy đủ cho PHP 7 và hiện có sẵn dưới dạng PDF có thể tải xuống. Nhận hơn 1200 trang học PHP thực hành ngay hôm nay

Nếu điều này hữu ích, vui lòng dành chút thời gian để nói với những người khác về Hacking với PHP bằng cách tweet về nó

Bạn có thể phân biệt thêm liệu chúng có đề cập đến cùng một đối tượng ban đầu hay không và so sánh chúng theo cùng một cách. === toán tử

if[$box1 === $box2] echo 'exact same object!';

Toán tử so sánh === trả về true khi hai biến trỏ đến cùng một giá trị. Nếu các đối tượng giống hệt nhau nhưng được lưu trữ ở các vị trí khác nhau, nó sẽ trả về false

____9. Tức là khi truyền đối tượng vào hàm thì hàm sẽ tác động lên chính đối tượng đó. Nếu đối tượng thay đổi bên trong hàm, thay đổi sẽ được phản ánh bên ngoài hàm. Đây là phần mở rộng của hành vi gán một đối tượng cho một biến mới.
Các đối tượng luôn hoạt động theo cách mà chúng cung cấp một đối tượng cho đối tượng gốc

$mynum = multiply[&5, &10];
0, chứ không phải đối tượng tạo ra chính nó
$mynum = multiply[&5, &10];
1.

$courier = new PigeonPost['Avian Delivery Ltd'];$other_courier = $courier;
$other_courier->name = 'Pigeon Post';
echo $courier->name; // outputs "Pigeon Post"

Đối tượng sẽ cung cấp một tham chiếu đến chính nó, thay vì sao chép một bản sao của chính nó. Điều này có nghĩa là nếu một hàm hoạt động trên một đối tượng được truyền vào, thì không cần phải quay lại từ hàm. Thay đổi này được phản ánh trong bản sao gốc của đối tượng

Nếu bạn cần sao chép một bản sao riêng của một đối tượng hiện có, bạn có thể sử dụng từ khóa

if[$box1 == $box2] echo 'equivalent';
0this để tạo nó

$courier = new PigeonPost['Avian Delivery Ltd'];$other_courier = clone $courier;
$other_courier->name = 'Pigeon Post';
echo $courier->name; // outputs "Avian Delivery Ltd"

Khi một đối tượng được sao chép, bất kỳ đối tượng nào được lưu trữ trong thuộc tính của nó sẽ là một tham chiếu thay vì một bản sao.
PHP có một cách kỳ diệu, đó là nếu một đối tượng được khai báo, nó sẽ được gọi khi đối tượng được sao chép. Đây là phương thức _clone[] mà bạn có thể khai báo và sử dụng để quyết định

if[$box1 == $box2] echo 'equivalent';
1.

Giao diện mượt mà
đối tượng luôn được truyền theo tham chiếu, nghĩa là không cần trả về một đối tượng từ một phương thức để quan sát các thay đổi của đối tượng đó. Tuy nhiên, nếu bạn trả về $this từ một phương thức, bạn có thể tạo một giao diện trôi chảy trong ứng dụng cho phép bạn liên kết các phương thức với nhau. Nguyên tắc làm việc như sau.
1. Tạo đối tượng
2. Gọi phương thức đối tượng
3. Nhận đối tượng đã sửa được trả về từ phương thức
4. Chọn quay lại bước 2

________số 8

Chìa khóa ở đây là bạn có thể gọi nhiều phương thức trong một dòng mã [bạn có thể thêm một số ngắt dòng để tăng khả năng đọc mã] và gọi chúng theo bất kỳ thứ tự nào. Vì mỗi phương thức trả về đối tượng được tạo, bạn có thể gọi phương thức tiếp theo bằng cách trả về đối tượng

Chuyển qua tham chiếu PHP có nhanh hơn không?

Trên thực tế, trong hầu hết các trường hợp, việc truyền theo giá trị sẽ nhanh hơn và tốn ít bộ nhớ hơn so với truyền theo tham chiếu . Zend Engine, lõi của PHP, sử dụng cơ chế tối ưu hóa copy-on-write không tạo bản sao của một biến cho đến khi nó được sửa đổi.

PHP có vượt qua giá trị hoặc tham chiếu không?

Theo mặc định, các biến PHP được truyền theo giá trị làm đối số hàm trong PHP. Khi các biến trong PHP được truyền theo giá trị, phạm vi của biến được xác định ở cấp hàm bị ràng buộc trong phạm vi của hàm. Thay đổi một trong hai biến không có bất kỳ ảnh hưởng nào đến một trong hai biến.

Tốt hơn là chuyển theo tham chiếu hoặc giá trị?

Truyền theo tham chiếu hiệu quả hơn truyền theo giá trị vì nó không sao chép đối số. Tham số chính thức là bí danh cho đối số. Khi hàm được gọi đọc hoặc ghi tham số hình thức, nó thực sự đọc hoặc ghi chính đối số đó.

Những bất lợi của vượt qua bằng cách tham khảo là gì?

Những nhược điểm chính của việc sử dụng lệnh gọi theo phương thức tham chiếu như sau. .
Hàm nhận tham chiếu yêu cầu đảm bảo rằng đầu vào không phải là giá trị rỗng. .
Hơn nữa, chuyển qua tham chiếu làm cho chức năng không thuần túy về mặt lý thuyết
Cuối cùng, với các tài liệu tham khảo, bảo hành trọn đời là một vấn đề lớn

Chủ Đề