PHP使用foreach更改对象的默认迭代器

PHP使用foreach更改对象的默认迭代器,php,arrays,object,foreach,Php,Arrays,Object,Foreach,对于这样的对象: class test { var $propa = 'a'; var $propb = 'b'; var $propc = 'c'; var $propd = array(1,2,3,4); } 如何在没有直接引用的情况下使用foreach迭代test:$propd?情商: $t = new test; foreach ($t as $k => $v){ echo 'propd['.$k.']='.$v.', '; } // propd[0]=1, propd[1]=2

对于这样的对象:

class test {
var $propa = 'a';
var $propb = 'b';
var $propc = 'c';
var $propd = array(1,2,3,4);
}
如何在没有直接引用的情况下使用foreach迭代test:$propd?情商:

$t = new test;
foreach ($t as $k => $v){
echo 'propd['.$k.']='.$v.', ';
}
// propd[0]=1, propd[1]=2, propd[2]=3, ...
是否有一些东西涉及到执行阵列访问?
谢谢

我建议分离功能,并将您的属性设置为私有

例如:

class Test {

   private $propertyA = 'a';
   private $propertyB = 'b';

   public function getProperties()
   {
        return [
           'propertyA' => $this->propertyA,
           'propertyB' => $this->propertyB
        ];
   }

}
但是,如果属性值要更改,则对属性执行getter和setter

使用上述代码,您可以执行以下操作:

<?php

$test = new Test;
foreach ($test->getProperties() as $key => $value) {
    echo $key . ' = ' . $value;
}

?>


您还可以限制使用此方法输出的属性。

我建议分离功能,并将属性设置为私有

例如:

class Test {

   private $propertyA = 'a';
   private $propertyB = 'b';

   public function getProperties()
   {
        return [
           'propertyA' => $this->propertyA,
           'propertyB' => $this->propertyB
        ];
   }

}
但是,如果属性值要更改,则对属性执行getter和setter

使用上述代码,您可以执行以下操作:

<?php

$test = new Test;
foreach ($test->getProperties() as $key => $value) {
    echo $key . ' = ' . $value;
}

?>


您还可以限制要使用此方法输出的属性。

尝试以下操作:echo'propd['.$k->$propd[$v].]='.$v'.';使用
var
是对PHP4的一种回溯,您应该改为设置(
public
/
private
/
protected
)尝试以下操作:echo'propd['.$k->$propd[$v].]='.$v.';使用
var
是对PHP4的一种回溯,您应该改为设置(
public
/
private
/
protected
)尝试以下操作:echo'propd['.$k->$propd[$v].]='.$v.';使用
var
是对PHP4的一种回溯,您应该改为设置(
public
/
private
/
protected
)是的,我知道,但主要的一点是是否有办法省略'->getProperties()'部分,并使foreach循环直接位于数组属性中。请尝试将要循环的属性设置为公共。然后做一个var_转储,看看你有什么可用的。范围没有问题。我找到了一个实现IteratorAggregate的可能解决方案:是的,我知道,但主要问题是是否有办法省略'->getProperties()'部分,并使foreach循环直接在数组属性中。请尝试将要循环的属性设置为公共。然后做一个var_转储,看看你有什么可用的。范围没有问题。我找到了一个实现IteratorAggregate的可能解决方案:是的,我知道,但主要问题是是否有办法省略'->getProperties()'部分,并使foreach循环直接在数组属性中。请尝试将要循环的属性设置为公共。然后做一个var_转储,看看你有什么可用的。范围没有问题。我找到了一个实现IteratorAggregate的可能解决方案: