Tôi có một lớp một và khởi tạo nó bằng cách sử mớiSử dụng __clone bằng PHP?
$obja = new a;
Tôi biết sự khác biệt giữa dưới hai dòng
$obja2 = $ojba;
$obja2 = clone $obja;
Nhưng ngay cả khi bạn khai báo hoặc không khai báo __clone trong lớp một là người đầu tiên dòng $ obja2 tham chiếu đến không gian bộ nhớ obja $ và dòng thứ hai tạo ra một bản sao của $ obja. Đến đây thì rõ ràng với tôi.
Vậy tại sao php lại có phương pháp ma thuật __clone? Là nó chỉ để thực hiện một tập hợp các mã được viết bên trong __clone trong khi chúng ta sử dụng $ obja2 = clone $ obja;
Ai đó hãy giúp bạn hiểu rõ hơn về điều đó.
Nó tồn tại để cho phép bạn sao chép bất kỳ trường hợp đối tượng nào được giữ trong đối tượng nếu bạn cần - theo mặc định con trỏ sẽ được sao chép nhưng đối tượng mới sẽ có cùng một phiên bản của đối tượng con. – DaveRandom
@DaveRandom: Bạn có thể giải thích đơn giản hơn một chút không :) có thể là một liên kết hoặc bất kỳ điều gì giải thích rõ hơn về điều này. tôi đã thực hiện googling của tôi – zamil
Hãy xem xét một đối tượng của lớp 'A' với thuộc tính' $ innerB', chứa một thể hiện của lớp 'B'. Khi bạn sao chép thể hiện của 'A', đối tượng mới sẽ có cùng một thể hiện của' B'. Bằng cách sử dụng bản sao, bạn có thể làm '$ this-> innerB = clone $ this-> innerB;' - để bạn có thể nhận được một thể hiện mới của 'B' cho đối tượng mới. Xem xét [this] (http://codepad.viper-7.com/Ngssxa) vs [this] (http://codepad.viper-7.com/51YWiC). – DaveRandom