2012-09-20 37 views
7

Tôi đã bối rối khi cố gắng truy cập trực tiếp vào phần tử mảng với chỉ mục của nó. Tôi đoán tôi có thể giải thích nó tốt hơn trong mã hóa: -Tại sao tôi không thể truy cập mảng bằng chỉ mục trực tiếp?

Tôi gặp một đối tượng của nhân viên Lớp và tôi định kiểu nó để mảng và cố gắng để hiển thị nó như thế này:

$arrOfObj = (array) $objEmployee; 

$arrKeys = array_keys($arrOfObj); 

display($arrOfObj); // display() is a method in my library that prints an array in a mannered way. 

này mang lại cho tôi kết quả như sau : -

Array 
(
    [*m_UserId] => 1155 
    [*m_EmailPassword] => 
    [*m_IsAssignedToManagementCompany] => 
    [*m_ManagementCompanyId] => 
    [*m_DepartmentId] => 3 
    [*m_DesignationId] => 4 
    [*m_EmployeeCompletedMonth] => 
    [*m_EmployeeCompletedDay] => 
    [*m_EmailAddress] =>[email protected] 
    ------ 
    ------ 
) 

Hiện tại tôi không hiểu sao này (*). khi các biến thành viên của tôi là đơn giản như m_UserId, m_EmialPassword và Vì vậy, từ đó nó được sao này. và khi tôi cố gắng để hiển thị cùng với sau 2 báo cáo tôi đã nhận ra lỗi: -

display($arrOfObj['*m_EmailAddress']); 

hay

display($arrOfObj['m_EmailAddress']); 

Cả hai phát biểu thông điệp Lỗi index Undefined: m_EmailAddress

Và khi tôi cố gắng làm điều đó theo cách này Nó hoạt động tốt: -

display($arrOfObj[$arrKeys[8]]); 

Tác phẩm cuối cùng hoạt động tốt, Mọi người có thể giải thích cho tôi về sự cố không.

  display($arrOfObj[$arrKeys[11]]); 
      display($arrOfObj['m_strEmailAddress']); 

Trả lời

14

Nếu một đối tượng được chuyển đổi thành một mảng, kết quả là một mảng mà các phần tử là tài sản của đối tượng. Các khóa là các tên biến thành viên, với một vài ngoại lệ đáng chú ý: các thuộc tính số nguyên không thể truy cập được; biến riêng có tên lớp được thêm vào tên biến; biến được bảo vệ có '*' được thêm vào tên biến. Các giá trị được thêm trước này có null byte ở hai bên.

http://php.net/manual/en/language.types.array.php#language.types.array.casting

Hãy thử var_dump(bin2hex($arrKeys[8])) cho giác ngộ. Cũng xem ví dụ trong hướng dẫn được liên kết ở trên.

+0

Sau đó, làm cách nào tôi có thể truy cập các khóa được bảo vệ bằng mảng có dấu sao và u không trả lời 3 dòng cuối cùng của câu hỏi của tôi. – ScoRpion

+2

Nếu bạn nhận được giá trị khóa "thực" từ các phím được trích xuất, bạn rõ ràng có được khóa chính xác. Để tự tạo một khóa chính xác, bạn phải bao gồm các byte NUL, như sau: '" \ 0 * \ 0m_strEmailAddress "'. – deceze

+6

Đó là '" \ 0 * \ 0strThree "'. Các chuỗi được trích dẫn kép và các byte NUL nằm xung quanh dấu hoa thị. – deceze

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