Você não pode fazer o que está pedindo; mas você pode "trapacear", usando o fato de que, no PHP, você pode ter uma função que tem o mesmo nome que uma classe; esses nomes não entrarão em conflito.
Portanto, se você declarou uma classe como esta:
class Test {
public function __construct($param) {
$this->_var = $param;
}
public function myMethod() {
return $this->_var * 2;
}
protected $_var;
}
Você pode declarar uma função que retorna uma instância dessa classe - e tem exatamente o mesmo nome da classe:
function Test($param) {
return new Test($param);
}
E agora, torna-se possível usar uma linha, como você perguntou - a única coisa é que você está chamando a função, portanto, não usando new:
$a = Test(10)->myMethod();
var_dump($a);
E funciona: aqui estou recebendo:
int 20
como saída.
E, melhor, você pode colocar algum phpdoc em sua função:
/**
* @return Test
*/
function Test($param) {
return new Test($param);
}
Dessa forma, você ainda terá dicas em seu IDE - pelo menos, com o Eclipse PDT 2.x; veja o screeshot:
Edit 30/11/2010: Apenas para informação, um novo RFC foi enviado há alguns dias atrás que propõe adicionar esse recurso a uma das futuras versões do PHP.
Consulte: Solicitação de comentários: acesso à instância e chamada de método / propriedade
Então, talvez fazer coisas como essas seja possível no PHP 5.4 ou em outra versão futura:
(new foo())->bar()
(new $foo())->bar
(new $bar->y)->x
(new foo)[0]