Non puoi fare quello che stai chiedendo; ma puoi "imbrogliare", usando il fatto che, in PHP, puoi avere una funzione che ha lo stesso nome di una classe; quei nomi non saranno in conflitto.
Quindi, se hai dichiarato una classe come questa:
class Test {
public function __construct($param) {
$this->_var = $param;
}
public function myMethod() {
return $this->_var * 2;
}
protected $_var;
}
È quindi possibile dichiarare una funzione che restituisce un'istanza di quella classe - e ha esattamente lo stesso nome della classe:
function Test($param) {
return new Test($param);
}
E ora, diventa possibile usare un one-liner, come hai chiesto - l'unica cosa è che stai chiamando la funzione, quindi non usando new:
$a = Test(10)->myMethod();
var_dump($a);
E funziona: ecco, sto ottenendo:
int 20
come uscita.
E, meglio, puoi mettere un po 'di phpdoc sulla tua funzione:
/**
* @return Test
*/
function Test($param) {
return new Test($param);
}
In questo modo, avrai anche suggerimenti nel tuo IDE, almeno con Eclipse PDT 2.x; vedi lo screeshot:
Modifica 30/11/2010: Solo per informazione, pochi giorni fa è stato presentato un nuovo RFC che propone di aggiungere questa funzionalità a una delle versioni future di PHP.
Vedere: Richiesta di commenti: chiamata di istanza e metodo / accesso alla proprietà
Quindi, forse fare cose come queste sarà possibile in PHP 5.4 o in un'altra versione futura:
(new foo())->bar()
(new $foo())->bar
(new $bar->y)->x
(new foo)[0]