Cloning object based on content in PHP -
i seem going round in circles here have situation when reading objects may come across contain array. when happens wish produce new objects based upon array example
sourceobject(namespace\classname)     protected '_var1' => array('value1', 'value2')     protected '_var2' => string 'variable 2' should become
childobject1(namespace\classname)     protected '_var1' => string 'value1'     protected '_var2' => string 'variable2'  childobject2(namespace\classname)     protected '_var1' => string 'value2'     protected '_var2' => string 'variable2' however due not quite getting head around clones end same content (sometimes both value1 value2)
you create method following one:
trait classsplitclone {     public function splitclone($name)     {          if (!is_array($this->$name)) {             return [$this];         }          $objs   = [];         $values = $this->$name;         $c      = 0;         foreach ($values $value) {             $objs[]          = $c ? clone $this : $this;             $objs[$c]->$name = $value;             $c++;         }          return $objs;     } } and use in class(es) trait
class classname {     use classsplitclone;      protected $var1;     protected $var2;      function __construct($var1, $var2)     {         $this->var1 = $var1;         $this->var2 = $var2;     } } an example like:
$obj = new classname(['value1', 'value2'], 'variable 2');  print_r($obj->splitclone('var1')); yielding following results:
array (     [0] => classname object         (             [var1:protected] => value1             [var2:protected] => variable 2         )      [1] => classname object         (             [var1:protected] => value2             [var2:protected] => variable 2         )  ) hope helps. alterantively can access private , protected members via reflectionobject.
the full example code (demo):
<?php /**  * @link http://stackoverflow.com/a/24110513/367456  */  /**  * class classsplitclone  */ trait classsplitclone {     public function splitclone($name)     {          if (!is_array($this->$name)) {             return [$this];         }          $objs   = [];         $values = $this->$name;         $c      = 0;         foreach ($values $value) {             $objs[]          = $c ? clone $this : $this;             $objs[$c]->$name = $value;             $c++;         }          return $objs;     } }  /**  * class classname  */ class classname {     use classsplitclone;      protected $var1;     protected $var2;      function __construct($var1, $var2)     {         $this->var1 = $var1;         $this->var2 = $var2;     } }  /*  * example  */ $obj = new classname(['value1', 'value2'], 'variable 2');  print_r($obj->splitclone('var1')); 
Comments
Post a Comment