PHP Foreach 对象数组
为什么,如果我有这样的对象数组:
class testClass {
private $_x = 10;
public function setX($x) {
$this->_x = $x;
}
public function writeX() {
echo $this->_x . '<br />';
}
}
$t = array();
for ($i = 0; $i < 10; $i++) {
$t[] = new testClass();
}
print_r($t);
我可以像这样通过 foreach 进行迭代:
foreach ($t as $tt) {
$tt->y = 7;
$tt->setX($counter);
$counter+=100;
}
print_r($t);
或者这样:
foreach ($t as &$tt) {
$tt->y = 7;
$tt->setX($counter);
$counter+=100;
}
print_r($t);
结果将相等?但是如果我在数组中有标量值,它们只能通过 ($arr as &$v) 修改,$v 只能通过引用修改?
Why, if I have array of objects like this:
class testClass {
private $_x = 10;
public function setX($x) {
$this->_x = $x;
}
public function writeX() {
echo $this->_x . '<br />';
}
}
$t = array();
for ($i = 0; $i < 10; $i++) {
$t[] = new testClass();
}
print_r($t);
I can iterate by foreach like this:
foreach ($t as $tt) {
$tt->y = 7;
$tt->setX($counter);
$counter+=100;
}
print_r($t);
Or this:
foreach ($t as &$tt) {
$tt->y = 7;
$tt->setX($counter);
$counter+=100;
}
print_r($t);
And result will be equal? But if i have scalar values in array, they can only be modified by ($arr as &$v), $v only by reference ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这取决于您使用的是 PHP5 还是早期版本。
在 PHP5 中,同样的事情因为它是一个对象数组。 (对于其他类型来说不是同一件事。)
在 PHP4 中,不是同一件事。 (但话又说回来,第二个无论如何都会抱怨语法。)
It depends on whether you're using PHP5 or an earlier version.
In PHP5, same thing because it is an array of objects. (Not the same thing for other types.)
In PHP4, not the same thing. (But then again, the second one will complain about a syntax anyway.)