คุณไม่สามารถทำสิ่งที่คุณขอได้ แต่คุณสามารถ "โกง" ได้โดยใช้ข้อเท็จจริงที่ว่าใน PHP คุณสามารถมีฟังก์ชันที่มีชื่อเดียวกับคลาสได้ ชื่อเหล่านั้นจะไม่ขัดแย้งกัน
ดังนั้นหากคุณประกาศคลาสเช่นนี้:
class Test {
public function __construct($param) {
$this->_var = $param;
}
public function myMethod() {
return $this->_var * 2;
}
protected $_var;
}
จากนั้นคุณสามารถประกาศฟังก์ชันที่ส่งคืนอินสแตนซ์ของคลาสนั้น - และมีชื่อเดียวกับคลาส:
function Test($param) {
return new Test($param);
}
และตอนนี้มันเป็นไปได้ที่จะใช้ซับเดียวอย่างที่คุณถามสิ่งเดียวคือคุณเรียกใช้ฟังก์ชันดังนั้นจึงไม่ใช้ใหม่:
$a = Test(10)->myMethod();
var_dump($a);
และได้ผล: ที่นี่ฉันได้รับ:
int 20
เป็นเอาต์พุต
และที่ดีกว่านั้นคุณสามารถใส่ phpdoc ในฟังก์ชันของคุณได้:
/**
* @return Test
*/
function Test($param) {
return new Test($param);
}
ด้วยวิธีนี้คุณจะมีคำใบ้ใน IDE ของคุณอย่างน้อยก็ด้วย Eclipse PDT 2.x; ดู screeshot:
แก้ไข 2010-11-30:เพียงเพื่อเป็นข้อมูลมีการส่ง RFC ใหม่เมื่อไม่กี่วันที่ผ่านมาซึ่งเสนอให้เพิ่มคุณสมบัตินี้ใน PHP เวอร์ชันอนาคต
ดู: ขอความคิดเห็น: อินสแตนซ์และวิธีการเรียก / การเข้าถึงคุณสมบัติ
ดังนั้นการทำสิ่งเหล่านี้อาจทำได้ใน PHP 5.4 หรือเวอร์ชันอื่นในอนาคต:
(new foo())->bar()
(new $foo())->bar
(new $bar->y)->x
(new foo)[0]