Bạn không thể làm những gì bạn đang yêu cầu; nhưng bạn có thể "gian lận", bằng cách sử dụng thực tế rằng, trong PHP, bạn có thể có một hàm có cùng tên với một lớp; những cái tên đó sẽ không xung đột.
Vì vậy, nếu bạn đã khai báo một lớp như thế này:
class Test {
public function __construct($param) {
$this->_var = $param;
}
public function myMethod() {
return $this->_var * 2;
}
protected $_var;
}
Sau đó, bạn có thể khai báo một hàm trả về một thể hiện của lớp đó - và có cùng tên với lớp:
function Test($param) {
return new Test($param);
}
Và bây giờ, có thể sử dụng một lớp lót, như bạn đã hỏi - điều duy nhất là bạn đang gọi hàm, do đó không sử dụng mới:
$a = Test(10)->myMethod();
var_dump($a);
Và nó hoạt động: ở đây, tôi nhận được:
int 20
làm đầu ra.
Và, tốt hơn, bạn có thể đặt một số phpdoc vào chức năng của mình:
/**
* @return Test
*/
function Test($param) {
return new Test($param);
}
Theo cách này, bạn thậm chí sẽ có gợi ý trong IDE của mình - ít nhất là với PDT 2.x của Eclipse; xem screeshot:
Chỉnh sửa 2010-11-30: Chỉ để biết thông tin, một RFC mới đã được gửi, vài ngày trước, đề xuất thêm tính năng này vào một trong những phiên bản tương lai của PHP.
Xem: Yêu cầu Nhận xét: Truy cập cá nhân và phương thức truy cập / thuộc tính
Vì vậy, có thể làm những việc như thế này sẽ có thể có trong PHP 5.4 hoặc phiên bản tương lai khác:
(new foo())->bar()
(new $foo())->bar
(new $bar->y)->x
(new foo)[0]