Возможно клонирование экземпляра и создание цепочки вызова метода? - PullRequest
3 голосов
/ 18 января 2012

Возможно ли clone экземпляр, вызывающий метод с цепочкой? Это дает мне синтаксическую ошибку :

/**
 * Parse an object containing (eventually) "duration" property or "year" (and
 * eventually) "month" properties.
 *
 * @return array Array containing start date and end date DateTime objects.
 */
public function parseTimeArgs($args)
{
    $now = new DateTime();

    if(isset($args->duration) && $duration = new DateInterval($args->duration))
        return array((clone $now)->sub($duration), $now);
}

Ответы [ 2 ]

0 голосов
/ 18 января 2012

Нет, это невозможно.Вместо этого вы можете использовать «фабричный» метод:

public function parseTimeArgs($args)
{
    $now = new DateTime();

    if(isset($args->duration) && $duration = new DateInterval($args->duration))
        return array($this->clone($now)->sub($duration), $now);
}

public function clone($object)
{
    return clone $object;
}

Примечание: использование оператора new в настоящее время также невозможно.В следующем выпуске PHP 5.4 это будет возможно для new следующим образом:

$a = (new a())->doStuff()->foMoreStuff();

Клонирование здесь не поддерживается.

0 голосов
/ 18 января 2012
public function parseTimeArgs($args)
{
    $now = new DateTime();
    $nowClone = clone $now;

    if(isset($args->duration) && $duration = new DateInterval($args->duration))
        return array($nowClone->sub($duration), $now);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...