内联PHP克隆

xghobddn  于 12个月前  发布在  PHP
关注(0)|答案(5)|浏览(108)

当尝试在PHP 5.2.9中执行此操作时:

$foo = (clone $template)->bar();

PHP给我一个语法错误:

Parser error "';' expected after expression (Found token: ->)"

我做错什么了吗?还是根本没有办法内联地克隆对象,这样我就必须将语句分成两行?

tkclm6bt

tkclm6bt1#

不幸的是,PHP不允许这种语法(在任何版本中)。作为将其分为两行的替代方法,您可以这样做:

$foo = call_user_func(array(clone $template, 'bar'));
tv6aics1

tv6aics12#

class X {
    public function foo(){
        echo 'inline clone';
    }
}

$x = new X;

$y = clone $x and $y->foo(); // "inline clone"
ntjbwcob

ntjbwcob3#

这只能在PHP 5.4.0中使用
阅读更新日志:
增加了示例化时的类成员访问(例如,(new foo)->bar())支持。

eqqqjvef

eqqqjvef4#

作为一种变通方法,你可以创建一个函数来克隆一个变量:

$clone = function ($value) {
    return clone $value;
};

$foo = $clone($template);
k5hmc34c

k5hmc34c5#

$newObject = (clone $objectToClone);

(Wont在PHP的旧版本中工作,在7.something+中也可以)

相关问题