2012-01-18 4 views
3

Est-il possible de clone une instance appelant une méthode dessus avec chaînage? Cela me donne une erreur de syntaxe :Clonage d'une instance et chaînage d'un appel de méthode, possible?

/** 
* 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); 
} 

Répondre

0

Non, cela est impossible. Vous pouvez utiliser une méthode « usine » à la place:

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; 
} 

Side note: Utilisation de l'opérateur new est actuellement pas possible de cette façon non plus. Dans la prochaine version de PHP 5.4, ce sera possible new comme suit:

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

Clone est cependant pas pris en charge ici.

-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

Oui, il n'est pas difficile de comprendre que c'est la bonne façon, mais je parle de chaînage: '(clone $ now) -> method()'. – Polmonino