#php #loops #foreach
#php #циклы #инициализирует
Вопрос:
Зачем, если у меня есть массив объектов, подобных этому:
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 amp;$tt) {
$tt->y = 7;
$tt->setX($counter);
$counter =100;
}
print_r($t);
И результат будет одинаковым? Но если у меня есть скалярные значения в массиве, они могут быть изменены только с помощью ($ arr as amp; $ v), $ v только по ссылке?
Ответ №1:
Это зависит от того, используете ли вы PHP5 или более раннюю версию.
В PHP5 то же самое, потому что это массив объектов. (Не то же самое для других типов.)
В PHP4 это не одно и то же. (Но опять же, второй в любом случае будет жаловаться на синтаксис.)
Комментарии:
1. Итак, я должен просто запомнить это поведение «как есть»?
2. Или, возможно, вы захотите прочитать это: php.net/manual/en/language.oop5.references.php
3. Где я могу найти информацию о моем вопросе в этом руководстве?
4. > Объектная переменная больше не содержит сам объект в качестве значения. Он содержит только идентификатор объекта, который позволяет средствам доступа к объекту находить фактический объект. Когда объект отправляется с помощью аргумента, возвращается или присваивается другой переменной, разные переменные не являются псевдонимами: они содержат копию идентификатора, который указывает на один и тот же объект.