Vous ne pouvez pas faire ce que vous demandez ; mais vous pouvez "tricher", en utilisant le fait que, en PHP, vous pouvez avoir une fonction qui a le même nom qu'une classe ; ces noms n'entre pas en conflit.
Donc, si vous avez déclaré une classe comme ceci :
class Test {
public function __construct($param) {
$this->_var = $param;
}
public function myMethod() {
return $this->_var * 2;
}
protected $_var;
}
Vous pouvez déclarer une fonction qui retourne une instance de cette classe -- et a exactement le même nom que la classe :
function Test($param) {
return new Test($param);
}
Et maintenant, il devient possible d'utiliser un one-liner, comme vous l'avez demandé -- la seule chose c'est que vous êtes l'appel de la fonction, donc pas à l'aide de nouveau :
$a = Test(10)->myMethod();
var_dump($a);
Et ça fonctionne : ici, j'obtiens :
int 20
en sortie.
Et, mieux, vous pouvez mettre un peu de phpdoc sur votre fonction :
/**
* @return Test
*/
function Test($param) {
return new Test($param);
}
De cette façon, vous aurez même des astuces dans votre IDE -- au moins, avec Eclipse PDT 2.x ; voir le screeshot :
Edit 2010-11-30 : Juste pour information, une nouvelle RFC a été soumis, il y a quelques jours, qui propose d'ajouter cette fonctionnalité à l'une des prochaines versions de PHP.
Voir : Demande de Commentaires: l'Instance et de l'appel de la méthode/de l'accès à la propriété
Alors, peut-être faire des choses comme celles-là sera possible en PHP 5.4 ou une autre version future :
(new foo())->bar()
(new $foo())->bar
(new $bar->y)->x
(new foo)[0]