内联 PHP 克隆

问题描述 投票:0回答:5

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

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

PHP 给我一个语法错误:

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

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

php clone inline
5个回答
11
投票

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

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

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

$x = new X;

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

0
投票

这仅适用于 PHP 5.4.0

阅读变更日志:

添加了实例化时的类成员访问(例如 (new foo)->bar()) 支持。


0
投票

作为解决方法,您可以创建一个函数来克隆变量:

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

$foo = $clone($template);

0
投票
$newObject = (clone $objectToClone);

(在旧版本的 PHP 中不起作用,但在 7.something+ 中可以)

© www.soinside.com 2019 - 2024. All rights reserved.