带有类数组的php foreach()

Bre*_*tOC 1 php foreach class

我需要一些帮助.我有一个工作类,我可以使用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";
}
Run Code Online (Sandbox Code Playgroud)

生产:

a => 3
b => 5
Run Code Online (Sandbox Code Playgroud)

现在,当我想要一个MyClass数组时,我的问题出现了:

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";
}
Run Code Online (Sandbox Code Playgroud)

生产:

Catchable fatal error: Object of class MyClass could not be converted to string...
Run Code Online (Sandbox Code Playgroud)

如何循环遍历$ class数组的所有元素?任何帮助都会很棒!

Mar*_*c B 5

您的类没有实现__toString()方法,因此当您尝试打印时,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
Run Code Online (Sandbox Code Playgroud)

您需要添加一个ANOTHER循环来迭代类的成员:

foreach($class as $key => $myclass) {
   foreach($myclass as $key2 => $val) {
       echo ("$key2 => $val");
   }
}
Run Code Online (Sandbox Code Playgroud)

...或者实现__toString()方法做你想要的任何obj->字符串转换.