The purpose of RFC is to presents the support for instantiating a class and calling its methods and accessing its properties on same command. We could use one of two syntaxes below:
<?php class foo extends ArrayObject { public function __construct($arr) { parent::__construct($arr); } } var_dump( (new foo( array(1, array(4, 5), 3) ))[1][0] ); // int(4) ?>
<?php class foo { public $x = 1; } class bar { public $y = 'foo'; } $x = 'bar'; $bar = new bar; var_dump((new bar)->y); // foo var_dump((new $x)->y); // foo var_dump((new $bar->y)->x); // 1 ?>
<?php class bar { public $z; public function __construct() { $this->z = new stdclass; } public function getZ() { return $this->z; } } var_dump(clone (new bar)->z); var_dump(clone (new bar)->getZ()); ?>
<?php class foo { public $x = 1; public function getX() { return $this->x; } public function setX($val) { $this->x = $val; return $this; } } $X = new foo->setX(10)->getX(); var_dump($X); // int(10) ?>
<?php class foo { public $x = 'testing'; public function bar() { return "foo"; } public function baz() { return new self; } static function xyz() { } } var_dump(new foo()->bar()); // string(3) "foo" var_dump(new foo()->baz()->x); // string(7) "testing" var_dump(new foo()->baz()->baz()->bar()); // string(3) "foo" var_dump(new foo()->xyz()); // NULL new foo()->www(); // Fatal error: Call to undefined method foo::www() ?>
<?php class foo { public function __construct() { throw new Exception('foobar'); } } try { $X = new foo->Inexistent(3); } catch (Exception $e) { var_dump($e->getMessage()); // foobar } ?>