2015-12-04 28 views
9

foreach trong PHP7 theo mặc định, khi lặp lại theo giá trị, hoạt động trên một bản sao của mảng theo: http://php.net/manual/en/migration70.incompatible.phpthay đổi foreach trong PHP7

Liệu nó uể oải tạo ra một bản sao duy nhất nếu có sự thay đổi thực hiện cho các mảng hoặc một giá trị hay nó sẽ luôn luôn tạo ra một bản sao và trong bản chất làm cho looping trên tài liệu tham khảo một tối ưu hóa hiệu suất?

Ngoài ra, các mảng đối tượng vẫn lặp qua/cung cấp cho bạn tham chiếu về các đối tượng? Hay họ cũng sẽ tạo bản sao cho foreach và trả về các vật thể theo giá trị?

+0

Theo [câu trả lời hàng đầu ở đây] (http://stackoverflow.com/questions/10057671/how-does-foreach-actually-work?rq=1) cũng có bản sao được tạo bằng PHP5 khi lặp lại theo giá trị. – Kenney

+2

Gợi ý: Chỉ cần lặp lại và không cố gắng tối ưu hóa bằng cách "viết mã hiệu quả". Phần lớn thời gian chỉ sử dụng các cấu trúc và cho chúng biết cách thực thi mã. Chỉ khi bạn đo lường hiệu suất đó không được chấp nhận, bạn có muốn thực hiện thay đổi không. (Không phải là câu trả lời hoặc câu trả lời vì có lý do học thuật để đặt câu hỏi, nhưng điều này đáng ghi rõ) – ircmaxell

+0

@ircmaxell điều này có thể được xây dựng briefer: http://stackoverflow.com/questions/385506/when-is-optimisation- sớm –

Trả lời

12

Trong PHP 7, nếu bạn lặp lại một mảng theo giá trị, bản sao sẽ được thực hiện một cách lười biếng, chỉ khi nào và nếu mảng đó thực sự được sửa đổi.

Nếu bạn lặp lại một mảng bằng tham chiếu thay vào đó, việc tách sẽ được thực hiện ở đầu vòng lặp. Nếu mảng hiện đang được sử dụng ở nhiều nơi, sự phân tách này sẽ dẫn đến một bản sao.

Hơn nữa lặp bằng tham chiếu có nghĩa là a) mảng phải được bao bọc thành tham chiếu và b) mỗi phần tử cũng phải được bao bọc trong tham chiếu. Tạo một trình bao bọc tham chiếu là một hoạt động tốn kém, vì nó yêu cầu phân bổ.

Ngoài ra lặp lại theo tham chiếu yêu cầu chúng tôi sử dụng cơ chế lặp lại an toàn sửa đổi. Điều này hoạt động bằng cách đăng ký trình vòng lặp với mảng và kiểm tra các trình vòng lặp có khả năng bị ảnh hưởng trong các hoạt động sửa đổi mảng khác nhau.

Vì vậy, không, lặp lại bằng tham chiếu chắc chắn không phải là tối ưu hóa, đó là một tối ưu hóa. Sử dụng tài liệu tham khảo thường là.

Các vấn đề liên quan