Подтвердить что ты не робот

Встроенный PHP-клон

При попытке сделать это в PHP 5.2.9:

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

PHP дает мне синтаксическую ошибку:

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

Я что-то делаю неправильно? или просто нет способа клонировать объект inline, так что мне пришлось бы разбить мое выражение на две строки?

4b9b3361

Ответ 1

К сожалению, PHP не позволяет использовать этот синтаксис (в любой версии). В качестве альтернативы разбиению на две строки вы можете сделать это:

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

Ответ 2

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

$x = new X;

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

Ответ 3

Это будет доступно только с PHP 5.4.0

Чтение журнала изменений:

Добавлен доступ к членам класса при создании экземпляра (например, (new foo) → bar()) поддержка.

Ответ 4

В качестве обходного пути вы можете создать функцию для клонирования переменной:

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

$foo = $clone($template);