当尝试在PHP 5.2.9中执行此操作时:
$foo = (clone $template)->bar();
PHP给我一个语法错误:
Parser error "';' expected after expression (Found token: ->)"
我做错什么了吗?还是根本没有办法内联地克隆对象,这样我就必须将语句分成两行?
tkclm6bt1#
不幸的是,PHP不允许这种语法(在任何版本中)。作为将其分为两行的替代方法,您可以这样做:
$foo = call_user_func(array(clone $template, 'bar'));
tv6aics12#
class X { public function foo(){ echo 'inline clone'; } } $x = new X; $y = clone $x and $y->foo(); // "inline clone"
ntjbwcob3#
这只能在PHP 5.4.0中使用阅读更新日志:增加了示例化时的类成员访问(例如,(new foo)->bar())支持。
eqqqjvef4#
作为一种变通方法,你可以创建一个函数来克隆一个变量:
$clone = function ($value) { return clone $value; }; $foo = $clone($template);
k5hmc34c5#
$newObject = (clone $objectToClone);
(Wont在PHP的旧版本中工作,在7.something+中也可以)
5条答案
按热度按时间tkclm6bt1#
不幸的是,PHP不允许这种语法(在任何版本中)。作为将其分为两行的替代方法,您可以这样做:
tv6aics12#
ntjbwcob3#
这只能在PHP 5.4.0中使用
阅读更新日志:
增加了示例化时的类成员访问(例如,(new foo)->bar())支持。
eqqqjvef4#
作为一种变通方法,你可以创建一个函数来克隆一个变量:
k5hmc34c5#
(Wont在PHP的旧版本中工作,在7.something+中也可以)