2010-12-10 4 views
3

는 I 그것은 값의 값 또는 배열을 일부 입력 세정을 수행 PHP의 foreach - 객체를 통해 반복하고 값을 변경 - PHP5

의 간단한 연소 정화 기능을 갖는다. 지금은 내가 그것을 obejcts뿐만 아니라 배열에 적용 할 수 있어야하므로 객체로 행을 페치됩니다 mysqli를 사용하고

function filter_out($output=''){ 
    if($output != ''){ 
     // i.e passed $_POST array 
     if(is_array($output)){ 
      $newoutput = array(); 
      foreach($output as $outputname=>$outputval){ 
       $newoutput[$outputname] = stripslashes($outputval); 
       $newoutput[$outputname] = htmlspecialchars($newoutput[$outputname]); 
      } 
     } else if(is_object($input)){ 
      ? 
     } 
    } 
} 

내가 입력으로 객체와 동등 할 수있는 방법을 누군가가 말해 줄래?

답변

3

당신이 찾고있는 기능은 get_object_vars입니다 : 항상 잘 작동하지 않기 때문에

$vars = get_object_vars($input); 
foreach ($vars as $outputname => $outputval) { 
    ///... 
} 

는, 객체 자체 ( foreach ($object as $key => $value))에 반복하지 마십시오. 때때로 (예를 들어 stdClass)되며, 경우에 따라서는 (모든 클래스는 Traversable를 구현하지 않습니다 ...

편집 지금까지 귀하의 코멘트가 간다

...있는 한 클래스가 때로 믿을 수로

$newoutput = clone $input; //make a copy to return 
$vars = get_object_vars($input); 
foreach ($vars as $outputname => $outputval) { 
    $newoutput->$outputname = htmlspecialchars(stripslashes($outputval)); 
} 

하지만 정말 시간의 100 % 작동합니다 어떤 방법 ... 다른 옵션을 생각할 수 없다 '는 아무것도 재미 (__get 또는 __set, protected 또는 private)를하고 t, 당신은 할 수 , 돌아올 것입니다. 니베 객체 (stdclass) 대신에 제출 한 : 당신이 배열을 언급 이후

$vars = get_object_vars($input); 
foreach ($vars as $outputname => $outputval) { 
    $input->$outputname = htmlspecialchars(stripslashes($outputval)); 
} 
+0

:

$output = (array) $output; foreach ($output as &$value) { $value = htmlspecialchars(stripslashes($value)); } 

을 같은 하나의 흐름을 볼 수 있었다 Traversable을 구현하는 모든 클래스 ... "는 Traversable을 구현하지 않는 ** 클래스 **를 의미하지 않았습니까?"작업 권한 "이 (모든 사용자 정의 동작과 반대되는) 모든 public 속성을 가져 오는 것을 의미하지 않는다면? – netcoder

+0

@netcoder : 아니요, ** a 구현하는 클래스가 ... ** 정확합니다. 'Traversable'을 구현 한 클래스는 반복 동작을 변경하며 반복에서 객체 속성을 반환하지 않습니다 **. –

+0

@ 스 테판 : ㅎ, "일하는 권리"에 대한 귀하의 정의가 무엇을 의미하는지에 따라 달라집니다. ;-) 그러나 나는 생각을 얻는다. – netcoder

0

ircmaxell's answer에 영업 이익의 의견에 답변을 그냥 stdClass 그럼 왜 배열로 개체를 캐스팅하지?

$newoutput = array() 
foreach ((array) $output as $key => $value) { 
    $newoutput[$key] = htmlspecialchars(stripslashes($value)); 
} 

또는 당신은 장소에 그것을 할 아마 수 : 때로는 원 "나는 확실하지 않다

function filter_out($output=''){ 
    if($output != ''){ 
    // i.e passed $_POST array 
    $is_array = is_array($output); 
    $output = (array) $output; 
    foreach($output as &$outputval){ 
     $outputval = htmlspecialchars(stripslashes($outputval)); 
    } 
    if (!$is_array) { 
     $output = (object) $output; 
    } 
    } 
    return $output; 
} 
0

나는 그들이 같은데요 mysqli에서 오는 객체 :

$newoutput = new StdClass(); 
$vars = get_object_vars($input); 
foreach ($vars as $outputname => $outputval) { 
    $newoutput->$outputname = htmlspecialchars(stripslashes($outputval)); 
} 
관련 문제