2012-01-18 47 views
3

有没有可能对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); 
} 

回答

0

不,这是不可能的。你可以使用一个“工厂”方法,而不是:

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(); 

克隆但是此处不支持。

-1
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); 
} 
+0

是的这不难理解,这是正确的方式,但我在谈论链接:'(clone $ now) - > method()'。 – Polmonino 2012-01-18 14:54:13