2011-09-05 71 views
5

Tôi tự hỏi làm thế nào tôi có thể đổi tên một tài sản đối tượng trong PHP, ví dụ:PHP - Cách đổi tên thuộc tính đối tượng?

<?php 
    $obj = new stdclass(); 
    $obj->a = 10; // will be renamed 
    $obj->b = $obj->a; // rename "a" to "b", somehow! 
    unset($obj->a); // remove the original one 

Nó không làm việc trong PHP5.3, (donno về các phiên bản trước đó) vì sẽ có một tài liệu tham khảo của $obj->a giao cho $obj->b và do đó, bằng cách bỏ đặt số $obj->a, giá trị của $obj->b sẽ không có giá trị. Bất kỳ ý tưởng xin vui lòng?

+1

PHP Version 5.3.4 sau khi thực thi mã $ obj của bạn: đối tượng (stdClass) # 1 (1) {[ "b"] => int (10)} – Fivell

+2

Nó không phải là một tham chiếu. Xem [câu trả lời này] (http://stackoverflow.com/questions/3611986/in-php-can-someone-explain-cloning-vs-pointer-reference/3612129#3612129) để biết chi tiết về PHP xử lý các biến và tham chiếu. .. – ircmaxell

Trả lời

5

Mã của bạn hoạt động chính xác, $obj->b10 sau khi thực hiện: http://codepad.org/QnXvueic

Khi bạn bỏ đặt $obj->a, bạn chỉ cần loại bỏ tài sản, bạn không chạm đến giá trị. Nếu giá trị được sử dụng bởi một biến khác, giá trị đó bị bỏ qua trong biến thứ tự.

+0

Rất tiện dụng. Nó tiết kiệm phải làm việc phản ánh và các công cụ ưa thích khác như trong các ngôn ngữ khác. –

+0

cảm ơn! đó là lý do tại sao tôi nhận được NULL sau khi unsetting một tài sản = O –

0
<?php  
$obj = new stdclass(); 
$obj->a = 10; // will be renamed 
$obj->b = $obj->a; // rename "a" to "b", somehow! 
unset($obj->a); // remove the original one 
var_dump($obj->b); //10 Works fine 
+0

Đó không phải là một đổi tên, đó là một bản sao. Nó sẽ chiếm hai lần bộ nhớ của -> a. Chỉ cần nói là "đổi tên" thường chỉ là điều quan trọng đối với các nhà phát triển xử lý các tập dữ liệu lớn. – John

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