Một thành ngữ thường được sử dụng trong các ngôn ngữ OO như Python và Ruby đang instantiating một đối tượng và chaining phương pháp mà trả về một tham chiếu đến đối tượng riêng của mình, chẳng hạn như:"Inline" Class Instantiation trong PHP? (Đối với Dễ Phương pháp Chaining)
s = User.new.login.get_db_data.get_session_data
Trong PHP, nó có thể tái tạo hành vi này như sau:
$u = new User();
$s = $u->login()->get_db_data()->get_session_data();
Cố gắng kết quả như sau trong syntax error, unexpected T_OBJECT_OPERATOR
:
$s = new User()->login()->get_db_data()->get_session_data();
Có vẻ như điều này có thể được thực hiện bằng cách sử dụng các phương thức tĩnh, có lẽ là những gì tôi sẽ làm, nhưng tôi muốn kiểm tra lazyweb: Có thực sự một cách đơn giản, sạch sẽ để khởi tạo các lớp PHP "inline" (như được hiển thị trong đoạn mã trên) cho mục đích này?
Nếu tôi quyết định sử dụng các phương pháp tĩnh, là nó quá sorcerous để có một phương thức tĩnh của lớp trả về một instantiation của lớp chính nó? (Hiệu quả viết nhà xây dựng của riêng tôi-đó-không-một-constructor?) Nó cảm thấy loại bẩn, nhưng nếu không có quá nhiều tác dụng phụ đáng sợ, tôi chỉ có thể làm điều đó.
Tôi đoán tôi cũng có thể đặt trước một UserFactory với phương thức get_user(), nhưng tôi tò mò về các giải pháp cho những gì tôi đã hỏi ở trên.
Vì PHP 5.4 các công trình sau: '(new User()) -> login() -> ...', xem [PHP changelog] (http://php.net/ChangeLog-5.php) cho 5.4 .0 * "Đã thêm quyền truy cập thành viên của lớp vào instantiation (ví dụ: (mới foo) -> bar()) hỗ trợ "* – hakre