尝试在 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'));
class 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()) 支持。
作为解决方法,您可以创建一个函数来克隆变量:
$clone = function ($value) {
return clone $value;
};
$foo = $clone($template);
$newObject = (clone $objectToClone);
(在旧版本的 PHP 中不起作用,但在 7.something+ 中可以)