在尝试使用PHP 5.2.9时进行此操作:
$foo = (clone $template)->bar();
PHP 给我一个语法错误:
Parser error "';' expected after expression (Found token: ->)"
我是不是做错了什么?还是根本没有办法内联克隆一个对象,以至于我必须将语句拆分成两行?
在尝试使用PHP 5.2.9时进行此操作:
$foo = (clone $template)->bar();
PHP 给我一个语法错误:
Parser error "';' expected after expression (Found token: ->)"
我是不是做错了什么?还是根本没有办法内联克隆一个对象,以至于我必须将语句拆分成两行?
很遗憾,PHP不允许使用那种语法(在任何一个版本中都不支持)。如果想要避免把代码分成两行,你可以这样做:
$foo = call_user_func(array(clone $template, 'bar'));
call_user_function
版本的。;-) - Thomas Ahleclass X {
public function foo(){
echo 'inline clone';
}
}
$x = new X;
$y = clone $x and $y->foo(); // "inline clone"
这只能在 PHP 5.4.0 及以上版本使用。
阅读变更日志:
添加了类成员实例化访问(例如,(new foo)->bar())支持。
new
。它不适用于 clone
https://eval.in/123192 :(。 - gen_Eric作为一种解决方法,您可以创建一个函数来克隆一个变量:
$clone = function ($value) {
return clone $value;
};
$foo = $clone($template);
$newObject = (clone $objectToClone);