2016-03-24 14 views
5

Tôi đang cố tạo một mảng chứa nhiều đối tượng.Cách truyền nhiều phần tử mảng vào đối tượng

tôi đã viết mã này (đó là một thành viên của một lớp học hiện)

public static $Roles = [ 
    (object) ['code' => 'SO', 'name' => 'Socio'], 
    (object) ['code' => 'RESP', 'name' => 'Responsabile zona'], 
    (object) ['code' => 'AMM', 'name' => 'Amministratore'], 
]; 

nhưng tôi nhận được lỗi này:

syntax error, unexpected '(object)' (object) (T_OBJECT_CAST), expecting ')'

trên dòng thứ hai.

Tôi nghĩ điều này nên làm việc, bởi vì tôi đã sử dụng cú pháp đúc tương tự để xác định các phần tử mảng kết hợp:

return view('edit-headquarter', [ 
    'hq' => (object)['name' => '', 'id' => 0], 
    'submitAction' => 'insert' 
]); 

tôi đang làm điều gì sai?

EDIT: Tôi đang sử dụng PHP 5.4.45

Tôi không chắc chắn, nhưng this can be related theo đề nghị của Martin Persson

+0

Tôi nghĩ rằng đây có cái gì để làm với phiên bản php của bạn. Nếu nó không hoạt động, bạn có thể nghĩ về việc khai báo một đối tượng Stdclass hoặc thậm chí tốt hơn, để thực hiện một hàm trả về một đối tượng stdclass từ mảng được cung cấp. (Ngoài ra, một mẹo khác có thể là json_decode một json_encode (mảng)) – briosheje

+0

@ user340764, nơi nó hoạt động tốt? https://3v4l.org/pXo2o – Federkun

+0

Vấn đề là gì? Bạn chuyển đổi mảng thành các đối tượng 'stdClass' chỉ là mảng có ít tính năng hơn và một cú pháp khác. Họ không cung cấp bất kỳ tính năng OOP hữu ích nào. Bạn nên tạo một lớp 'Role' và chuyển các giá trị của' code' và 'name' làm các đối số cho hàm tạo của nó. Không cần chuyển đổi nữa và bạn có thể thêm nhiều tính năng hơn cho chúng khi cần. – axiac

Trả lời

3

Nếu bạn đang sử dụng phiên bản PHP dưới đây v5.6, sau đó bạn sẽ không được phép có một biểu thức như một giá trị mặc định cho các thành viên lớp. Ngoài ra, tôi không thấy bất cứ điều gì sai trái với cách bạn đã tuyên bố nó.

+0

Tôi trích xuất biểu thức thành một biến và sử dụng biến đó làm giá trị mặc định. Các đối tượng bây giờ tạo ra tốt. Tôi nhận được lỗi khi xác định thuộc tính nói rõ. –

+0

Ok, theo đề xuất của Federico, tôi không thể sử dụng biến làm initializer. Điều đó có ý nghĩa ... Cảm ơn tất cả các bạn! –

0

Để đúc một mảng kết hợp cho đối tượng bạn có thể sử dụng một chút bẩn, nhưng sử dụng rộng rãi

$obj = json_decode(json_encode($arr));

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