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的可能解决方案: