PHP — поиск по массиву объектов

#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. > Объектная переменная больше не содержит сам объект в качестве значения. Он содержит только идентификатор объекта, который позволяет средствам доступа к объекту находить фактический объект. Когда объект отправляется с помощью аргумента, возвращается или присваивается другой переменной, разные переменные не являются псевдонимами: они содержат копию идентификатора, который указывает на один и тот же объект.