2012-06-07 3 views
0

클래스의 생성자에 전달되는 변수 배열이 있습니다. 이 클래스를 특정 클래스의 객체 배열로 변환하려고합니다.PHP에서 배열의 모든 항목을 클래스의 객체로 인스턴스화

무엇이 가장 입니까? 어떻게해야합니까?

예.

class Foo { public function __construct($a) {$this->a=$a;} } 
print_r(mass_instantiate(array(1, 2, 3), 'Foo')); 

// gives: 

Array 
(
    [0] => Foo Object 
     (
      [a] => 1 
     ) 

    [1] => Foo Object 
     (
      [a] => 2 
     ) 

    [2] => Foo Object 
     (
      [a] => 3 
     ) 

) 

답변

1

를 사용하여 배열의 거리를 전달할 수 있다는 제한 것 :

$arr = array(1,2,3,4,5,6,7,8,9,10); 
array_walk($arr, 'init_obj'); 

function init_obj(&$item1, $key){ 
    $item1 = new Foo($item1); 
} 
print_r($arr); 

이것은 당신에게 필요한 출력을 제공 할 것입니다.

+0

이것은 기본적으로'array_walk'을 사용하여'array_map'으로 새로운 배열을 만드는 대신 원래 배열을 변경합니다. 이것의 이점이 있습니까? – dave1010

+0

@ dave1010 : 새 메모리가 할당되지 않았습니다. 원하는 성능은 더 나은 성능으로 여기에서 얻을 수 있습니다. :) –

0

이것은 현재 사용하고있는 것입니다. 당신이 단지 1 인자에게

/** 
* Instantiate all items in an array 
* @param array $array of $classname::__construct()'s 1st parameter 
* @param string $classname to instantiate 
* @return array 
*/ 
function mass_instantiate($array, $classname) 
{ 
    return array_map(function($a) use ($classname) { 
     return new $classname($a); 
    }, $array); 
} 
관련 문제