2013-05-18 33 views
16

Tôi đã sử dụng PHP khá lâu rồi, nhưng chưa bao giờ là lập trình viên nâng cao. Tôi cảm thấy như đây là câu hỏi ngớ ngẩn nhưng không bao giờ hiểu tại sao một số giá trị mảng có thể được lấy ra bằng các phương pháp khác nhau:PHP truy xuất giá trị mảng bằng cách sử dụng mũi tên dấu gạch ngang "->"

này:

$array->value 

chứ không phải là bình thường:

$array['value'] 

Các tiêu chuẩn $ array [ 'value'] luôn hoạt động, nhưng phương thức sử dụng -> không có lúc. Tại sao vậy?

Đây là một ví dụ. Tôi đang sử dụng Zend Framework 2 và tôi có thể lấy một giá trị phiên sử dụng -> Phương pháp:

$this->session->some_value 

Tuy nhiên, tôi không thể nếu tôi làm một mới, mảng bình thường:

$array = array('some_value' => 'myvalue'); 
$array['some_value']; // works!! 
$array->some_value; // does not work :(

Trong Zend Framework 1 hầu hết các mảng sẽ làm việc tốt theo cách này, và trong ZF2 nhiều hơn và nhiều hơn nữa, tôi chạy vào các vấn đề mà tôi cần phải thay đổi cách tôi nhận được giá trị đó. Điều này có hợp lý không? Tôi chắc chắn đánh giá cao sự giúp đỡ nào. Cảm ơn, Greg

+0

Nhờ tất cả các câu trả lời tuyệt vời. Bạn hoàn toàn đúng về những gì tôi đang tìm kiếm. Voitcus (bên dưới) có chìa khóa để giúp tôi hiểu rõ hơn. Cảm ơn bạn, tất cả mọi người, vì sự giúp đỡ! – gregthegeek

Trả lời

19

Như đã nêu ở trên trong các câu trả lời khác, sử dụng -> có nghĩa là bạn đang truy cập một đối tượng chứ không phải mảng.

Tuy nhiên, đôi khi có thể một đối tượng sẽ được coi là một mảng. Đó là khi nó đang thực hiện giao diện ArrayAccess. Các coder có thể làm như vậy mà ví dụ. gọi số $object->field sẽ tương đương với $object['field'], nhưng không được.

Hơn nữa, có thể coi mảng là đối tượng (tham khảo to the manual), tuy nhiên trong trường hợp này, nó không phải là mảng mà là đối tượng và giống như trên.

+1

Đây là những gì tôi nghĩ và chính xác là những gì tôi đang tìm kiếm, chỉ không biết lý do chính xác. PHP của ArrayObject, tôi nghĩ, là những gì gây ra sự nhầm lẫn của tôi khi sử dụng ZF 1 hoặc 2, vì các đối tượng chủ yếu nhìn và cư xử như mảng. Giờ thì tôi đã hiểu! Yay! Sau khi đọc nhận xét của bạn và tài liệu được liên kết, tôi đã tìm thấy trang này cũng giúp tôi hiểu. Cảm ơn!! [http://codingexplained.com/coding/php/zend-framework/using-sessions-in-zend-framework-2](http://codingexplained.com/coding/php/zend-framework/using-sessions -in-zend-framework-2) – gregthegeek

2

Các biến cho phép bạn nhận các thuộc tính với -> thực sự là các đối tượng chứ không phải mảng. Chúng cho phép cú pháp ['some_key'], nhưng điều đó không có nghĩa là chúng là các mảng. Họ không phải.

Bạn có thể đọc thêm về các đối tượng on this page of the PHP manual.

1

Đó không phải là mảng, chúng là objects.

1

Đó là bởi vì nó không phải là một mảng, nó là một biến đối tượng.

Ví dụ;

class MyObject{ 

    var $myVariable = 'test'; 

} 

$MyObject = new MyObject(); 
echo $MyObject->myVariable; // Would return 'test' 
Các vấn đề liên quan