Cách tiêu chuẩn để tạo một đối tượng "trống" là:
$oVal = new stdClass();
Nhưng, với PHP> = 5.4, cá nhân tôi thích sử dụng:
$oVal = (object)[];
Nó ngắn hơn và cá nhân tôi cho rằng nó rõ ràng hơn vì stdClass có thể gây hiểu lầm cho các lập trình viên mới làm quen (tức là "Này, tôi muốn một đối tượng, không phải là một lớp!" ...).
Tương tự với PHP <5.4 là:
$oVal = (object) array();
(object)[]
tương đương với new stdClass()
.
Xem hướng dẫn sử dụng PHP ( tại đây ):
stdClass : Được tạo bằng cách đánh máy cho đối tượng.
và ( ở đây ):
Nếu một đối tượng được chuyển đổi thành một đối tượng, nó không được sửa đổi. Nếu một giá trị của bất kỳ loại nào khác được chuyển đổi thành một đối tượng, một thể hiện mới của lớp dựng sẵn stdClass được tạo .
Tuy nhiên, hãy nhớ rằng sản phẩm nào ($ oVal) trả về sai , như @PaulP đã nói:
Các đối tượng không có thuộc tính không còn được coi là trống rỗng.
Về ví dụ của bạn, nếu bạn viết:
$oVal = new stdClass();
$oVal->key1->var1 = "something"; // PHP creates a Warning here
$oVal->key1->var2 = "something else";
PHP tạo Cảnh báo sau, ngầm định tạo thuộc tính key1
(chính đối tượng)
Cảnh báo: Tạo đối tượng mặc định từ giá trị trống
Đây có thể là một vấn đề nếu cấu hình của bạn (xem mức báo cáo lỗi ) hiển thị cảnh báo này cho trình duyệt. Đây là toàn bộ chủ đề khác, nhưng cách tiếp cận nhanh và bẩn có thể sử dụng toán tử kiểm soát lỗi (@) để bỏ qua cảnh báo:
$oVal = new stdClass();
@$oVal->key1->var1 = "something"; // the warning is ignored thanks to @
$oVal->key1->var2 = "something else";
$var = (object) (boolean) (string) (int) (array) new StdClass;
Bạn biết đấy, chỉ để được an toàn.