2009-11-04 23 views
8

tôi đã chuyển đổi một mảng đối tượng dữ liệu như thế này:PHP đề cập đến đối tượng dữ liệu với số chủ chốt

<?php 
$myobject->data = (object)Array('zero','one','two'); 
print_r($myobject); 
?> 

Và kết quả là:

stdClass Object ([data] => stdClass Object ([0] => zero [1] => one [2] => two))

Cho đến nay rất tốt. Nhưng nếu tôi cố gắng tham khảo các phím số ...

<?php 
$myobject->data = (object)Array('zero','one','two'); 
$counter = 1; 
echo $myobject->data->$counter; 
?> 

... không có gì được trả lại! Tôi mong chờ nó sẽ vang lên "một".

Tôi có làm sai không?

Trả lời

15

Đó là một điều kỳ quặc trong PHP, bạn cần truy cập nó bằng cách sử dụng $object->data->{1}. Hoặc bạn có thể chuyển đổi nó trở lại mảng để truy cập các thành viên. Nhưng tôi nghĩ rằng đó là tốt nhất để có tên riêng cho các thành viên đối tượng, hãy thử một cái gì đó như thế này, ví dụ:

$myobject->data = (object)Array('m0' => 'zero','m1' => 'one','m2' => 'two'); 
$myObject->data->m1; 
1

Bạn có thể thử truy cập nó dưới dạng phần tử mảng. Nhưng tôi không chắc liệu điều đó có hiệu quả hay không. Tuy nhiên, những gì bạn có thể làm là lặp qua các phần tử đối tượng (hoặc đúng hơn là thuộc tính) bằng cách sử dụng vòng lặp foreach.

Giống như vậy:

foreach ($myobject->data as $key => $value) 
    echo "$key is my key.<br />"; 

Tôi chỉ không chắc chắn liệu bạn có thể truy cập vào chìa khóa, quá.

+0

Bạn đã kiểm tra điều này chưa? Tôi muốn được biết liệu nó có hiệu quả hay không. Khác, chỉ cần sử dụng giải pháp của soulmerge. – Franz

-3
echo $myobject->data[$counter]; 

Nếu tôi không nhầm.

+0

Lỗi nghiêm trọng: Không thể sử dụng đối tượng kiểu stdClass làm mảng –

+2

Miễn là lớp không triển khai ArrayAccess, bạn không thể truy cập nó theo cách này: http://de2.php.net/manual/de/class.arrayaccess .php – Boldewyn

1

Vấn đề bạn có là, mà $counter được tự động chuyển thành chuỗi cho nhìn lên. Hãy thử

$myobject->$counter = "abc"; 
var_dump($myobject); 

và bạn sẽ hiểu ý tôi là gì. Để né tránh việc sử dụng phương pháp này, Franz đã đề xuất.

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