2012-01-18 25 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