2013-07-08 3 views
1

도움이 필요합니다. 나는 노동 계급이 있고 나는 공용 변수 표시) foreach 문을 (사용할 수 있습니다php foreach() 클래스 배열로

class MyClass { 
    public $a; 
    public $b; 
    function __construct($aX,$bX){ 
      $this->a = $aX; 
      $this->b = $bX; 
    } 
} 

$class = new MyClass(3,5); 
foreach($class as $key => $value) { 
    print "$key => $value</br>\n"; 
} 

가 생산 : 나는 MyClass의 배열을 할 때

a => 3 
b => 5 

이제 내 문제가 발생 :

class MyClass 
{ 
    public $a; 
    public $b; 
    function __construct($aX,$bX){ 
     $this->a = $aX; 
     $this->b = $bX; 
    } 
} 

$class = array(
    "odd"=>new MyClass(3,5), 
    "even"=>new MyClass(2,4) 
    ); 
foreach($class as $key => $value) { 
    print "$key => $value</br>\n"; 
} 

는 생산 :

Catchable fatal error: Object of class MyClass could not be converted to string... 

$ class 배열의 모든 요소를 ​​반복하는 방법은 무엇입니까? 어떤 도움이라도 좋을 것입니다!

답변

5

귀하의 클래스는 __toString() 메소드를 implemen하지 않기 때문에 당신이 그것을 인쇄하려고하면 PHP가 자동으로 문자열에 MyClass에 변환 할 수있는 방법은 없습니다 :

foreach($class as $key => $value) { 
        ^^^^-- odd or even 
          ^^^^^^--- Object of type MyClass 

    print "$key => $value</br>\n"; 
        ^^^^^^--- try to output object in string context 

당신은 추가해야 할 것

foreach($class as $key => $myclass) { 
    foreach($myclass as $key2 => $val) { 
     echo ("$key2 => $val"); 
    } 
} 

을 ... 나> 문자열 변환 당신이를 OBJ 어떤할까요 않는 __toString() 메소드를 구현 : 다른 루프는 클래스의 멤버를 통해 반복합니다.

2

은 두 foreach는의

class MyClass 
{ 
    public $a; 
    public $b; 
    function __construct($aX,$bX){ 
     $this->a = $aX; 
     $this->b = $bX; 
    } 
} 

$class = array(
    "odd"=>new MyClass(3,5), 
    "even"=>new MyClass(2,4) 
    ); 
foreach($class as $arr) { 
    foreach($arr as $key => $value){ 
      print "$key => $value</br>\n"; 
    } 
} 
0

사용 get_class_vars이 필요합니다 :

<?php 
class C { 
    const CNT = 'Const Value'; 

    public static $stPubVar = "St Pub Var"; 
    private static $stPriVar = "St Pri Var"; 

    public $pubV = "Public Variable 1"; 
    private $priV = "Private Variable 2"; 

    public static function g() { 
     foreach (get_class_vars(self::class) as $k => $v) { 
      echo "$k --- $v\n"; 
     } 
    } 
} 

echo "\n"; 
C::g(); 

결과 :

pubV --- Public Variable 1 
priV --- Private Variable 2 
stPubVar --- St Pub Var 
stPriVar --- St Pri Var