Nie możesz zrobić tego, o co prosisz; ale możesz "oszukiwać", wykorzystując fakt, że w PHP możesz mieć funkcję, która ma taką samą nazwę jak klasa; te nazwy nie będą kolidować.
Więc jeśli zadeklarowałeś taką klasę:
class Test {
public function __construct($param) {
$this->_var = $param;
}
public function myMethod() {
return $this->_var * 2;
}
protected $_var;
}
Następnie możesz zadeklarować funkcję, która zwraca instancję tej klasy - i ma dokładnie taką samą nazwę jak klasa:
function Test($param) {
return new Test($param);
}
A teraz staje się możliwe użycie jednowierszowego, tak jak prosiłeś - jedyną rzeczą jest to, że wywołujesz funkcję, a więc nie używasz nowego:
$a = Test(10)->myMethod();
var_dump($a);
I działa: tutaj otrzymuję:
int 20
jako wyjście.
I lepiej, możesz umieścić phpdoc w swojej funkcji:
/**
* @return Test
*/
function Test($param) {
return new Test($param);
}
W ten sposób będziesz miał nawet wskazówki w swoim IDE - przynajmniej w Eclipse PDT 2.x; zobacz screeshot:
Edycja 2010-11-30: Tak dla informacji, kilka dni temu przesłano nowy dokument RFC, w którym proponuje się dodanie tej funkcji do jednej z przyszłych wersji PHP.
Zobacz: Żądanie komentarzy: dostęp do instancji i wywołania metody / właściwości
Może więc robienie takich rzeczy będzie możliwe w PHP 5.4 lub innej przyszłej wersji:
(new foo())->bar()
(new $foo())->bar
(new $bar->y)->x
(new foo)[0]