В этом и кроется главная проблема. 60% из этих 90%, ты может и знаешь, остальные 30% ты думаешь, что знаешь. Отсюда и пробелы в изучении. А ещё скажу прямо, мне не нравятся люди, которые постоянно говорят, "я так и думал" после того как получат ответ. Пиши свои мысли до того как задать вопрос и тебе ответят правильно ты думаешь или нет, и если неправильно, скажут как надо думать правильно.
@artoodetoo, я выше уже про это писал. Возможно, copy-on-write стал использовать в форыче раньше, чем в присвоении в целом. Отсюда и все терки.
и цикл здесь не при чём, опять. это фишка происходит при любом присвоении массива или передаче в качестве параметра. для того, чтобы не возникали никому не нужные тормоза и расход памяти, PHP идёт на уловку — когда ты присваиваешь массив чему-либо или передаешь его через параметр функции либо через переменную цикла, он прямо в этот момент не копируется в новую область памяти. но будет скопирован как только ты эту новую копию массива начнешь изменять. это правило справедливо и для переменной цикла в foreach ($array as $item). если в $item залетел массив, это НЕ равнозначно &$item. но массив не будет скопирован, пока ты используешь $item только для чтения. copy-on-write никак не меняет видимое поведение программы! только в 90% случаев оптимизирует скорость и расход памяти.
в учебных целях, проверьте в чём разница между этими двумя случаями: PHP: <?php $aa = [ ['a' => 1, 'b' => 2], ['a' => 3, 'b' => 4], ]; foreach ($aa as $x) { $x['a'] = 999; } var_export($aa); и PHP: <?php $ao = [ (object) ['a' => 1, 'b' => 2], (object) ['a' => 3, 'b' => 4], ]; foreach ($ao as $x) { $x->a = 999; } var_export($ao); и как изменится поведение если цикл изменить на ... as &$x) {
Скажу так: - Я сколько не читал про все эти PHP: class VAZ extends Car так нихрена и не понимал, зачем вообще нужно так усложнять код пока не начал применять ООП в реальных проектах, где оно как раз-таки упрощало код, а не усложняло У меня такой опыт.