{ public $prop = 'a value'; function foo($arg) { print "Constructor called on {$arg}\n"; } function method() { print "Method called\n"; return $this; } function method2() { print "Method 2 called\n"; return $this; } } $foo = new foo('an argument'); $foo->method()->method(); // Can you do it on properties too? print "property is :" . $foo->method()->prop . "\n"; $foo->method()->method2()->prop = 'newval'; print "property is :" . $foo->method()->method2()->prop . "\n"; // Don't forget the double-quoted string parser: print "property is : {$foo->method()->prop}\n"; function afun() { return new foo(22); } print afun()->prop; print_r(afun()->method());
<?php error_reporting(E_ALL); class foo { public $bar = "ok"; function method() { $this->yes = "done"; } } $baz = new foo(); $baz->method(); $arr[3] = new foo(); $arr[3]->method(); session_start(); $_SESSION["baz"] = $baz; $_SESSION["arr"] = $arr; var_dump(session_encode()); session_destroy();
The {$ ... } construct now allows general expressions in some cases. ${ ... } in some too, but not as many (??) <?php class foo { function method() { return "value"; } } $foo = new foo(); print "property is : {$foo->method(print 'asdf')}\n"; $bar = array(1, 2, 3); print "property is : {$bar[print 'another print']}\n"; print "property is : {$bar[print 'another print']}\n"; //$bar[print 'another print']; var_dump(print 'asdfasdfasdf');