Sie können nicht tun, was Sie fragen; aber Sie können "schummeln", indem Sie die Tatsache verwenden, dass Sie in PHP eine Funktion haben können, die den gleichen Namen wie eine Klasse hat; Diese Namen werden nicht in Konflikt geraten.
Also, wenn Sie eine Klasse wie folgt erklärt:
class Test {
public function __construct($param) {
$this->_var = $param;
}
public function myMethod() {
return $this->_var * 2;
}
protected $_var;
}
Sie können dann eine Funktion deklarieren, die eine Instanz dieser Klasse gibt - und hat genau den gleichen Namen wie die Klasse:
function Test($param) {
return new Test($param);
}
Und nun wird es möglich, einen Einzeiler zu verwenden, wie Sie gefragt - nur, was Sie die Funktion aufrufen, indem somit nicht neu:
$a = Test(10)->myMethod();
var_dump($a);
Und es funktioniert: hier, ich bin immer:
int 20
als Ausgabe.
Und besser, Sie einige phpdoc auf Ihre Funktion setzen können:
/**
* @return Test
*/
function Test($param) {
return new Test($param);
}
diese Weise werden Sie auch Hinweise in Ihrem IDE haben werden - zumindest mit Eclipse PDT 2.x; siehe Screeshot:
http://extern.pascal-martin.fr/so/class-and-function.png
bearbeiten 2010-11-30: Nur zur Information, eine neue RFC eingereicht wurde, vor ein paar Tagen, das schlägt hinzufügen Diese Funktion zu einer der zukünftigen Versionen von PHP.
See: Request for Comments: Instance and method call/property access
Also, vielleicht Dinge wie dies tun wird in PHP 5.4 oder einem anderen zukünftigen Version möglich sein:
(new foo())->bar()
(new $foo())->bar
(new $bar->y)->x
(new foo)[0]
Übrigens, wenn Sie nicht 5.4 verwenden (was Sie wahrscheinlich nicht sind), können Sie eine Hilfsfunktion definieren, die ein Objekt einfach an kettenstopfen zurückgibt ... Funktion mit ($ obj) {return $ obj; } (wählte den Trick aus Laravel: P) .. dann können Sie tun mit (new Obj) -> Methode() – kapv89
So einfach wie '(neues Objekt()) -> doSomething()'. –