Anda tidak dapat melakukan apa yang Anda minta; tetapi Anda dapat "menipu", menggunakan fakta bahwa, di PHP, Anda dapat memiliki fungsi yang memiliki nama yang sama dengan kelas; nama-nama itu tidak akan bertentangan.
Jadi, jika Anda mendeklarasikan kelas seperti ini:
class Test {
public function __construct($param) {
$this->_var = $param;
}
public function myMethod() {
return $this->_var * 2;
}
protected $_var;
}
Anda kemudian dapat mendeklarasikan fungsi yang mengembalikan instance kelas itu - dan memiliki nama yang persis sama dengan kelas:
function Test($param) {
return new Test($param);
}
Dan sekarang, menjadi mungkin untuk menggunakan satu-liner, seperti yang Anda minta - satu-satunya hal yang Anda panggil fungsi, sehingga tidak menggunakan yang baru:
$a = Test(10)->myMethod();
var_dump($a);
Dan itu bekerja: ini, saya mendapatkan:
int 20
sebagai output.
Dan, lebih baik, Anda dapat menempatkan beberapa phpdoc pada fungsi Anda:
/**
* @return Test
*/
function Test($param) {
return new Test($param);
}
Dengan cara ini, Anda bahkan akan memiliki petunjuk dalam IDE Anda - setidaknya, dengan Eclipse PDT 2.x; lihat screeshot:
Sunting 2010-11-30: Sekadar informasi, RFC baru telah dikirimkan, beberapa hari yang lalu, yang mengusulkan untuk menambahkan fitur ini ke salah satu versi PHP yang akan datang.
Lihat: Permintaan Komentar: Mesin virtual dan panggilan metode / akses properti
Jadi, mungkin melakukan hal-hal seperti ini dimungkinkan di PHP 5.4 atau versi lain di masa depan:
(new foo())->bar()
(new $foo())->bar
(new $bar->y)->x
(new foo)[0]