2012-01-18 15 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演算子を使用すると、この方法のいずれか現在のところ不可能であるあなたは、代わりに「工場」メソッドを使用することができます。

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

クローンは、しかし、ここではサポートされていません。次のように今後のPHP 5.4のリリースでは、これはnewのために可能になります。

-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

はい、正しい方法であることを理解するのは難しいことではありませんが、私は連鎖について話しています: '(クローン$今すぐ) - > method()'。 – Polmonino