Странное поведение массива...
Реализовал класс хуков через типы - все работало отлично. Потом решил переделать с использованием массивов - четко видно, что нигде логического тупняка я не допустил, методы класса логгируют, что добавлены 2 функции... но почему-то при запуске хука вызывается только одна функция... не могу понять в чем тут фейл...,,,???
Исходный код с примером -> На страницу должно вывести такую запись "Albert Hello! How are you?" но вторая функция не срабатывает и выводит только "Albert Hello!" PHP код:
|
Ответ: Странное поведение массива...
Вероятно потому что при присвоении создается копия массива?
PHP код:
|
Ответ: Странное поведение массива...
Не знал про такую особенность.
работающий код -> PHP код:
|
Ответ: Странное поведение массива...
Добавлю, что в PHP копия массива в памяти создаётся только при изменении одного из них. То есть допустим мы создали массив, присвоили его ещё десяти переменным (не по ссылке & !), в памяти этот массив всё ещё хранится в одном экземпляре. Пока мы просто читаем данные из этих массивов, ничего не происходит, но как только мы захотим изменить массив какой-то из переменных, например, добавить новый элемент, то тогда создаётся отдельная копия массива в памяти.
Это я к тому, что не стоит для оптимизации писать $newArray=&$array; Использовать ссылку нужно только тогда, когда нужно именно такое поведение. |
Ответ: Странное поведение массива...
Тут пишут что всегда копирование:
http://php.net/manual/ru/language.types.array.php Цитата:
|
Ответ: Странное поведение массива...
С уровня абстракции языка так оно и есть, но в памяти интерпретатора оба массива будут храниться как один. Но как только ты в один из массивов добавишь новый элемент, интерпретатор сразу создаст копию массива для второй переменной и только тогда добавит туда новый элемент.
Например, нужно написать функцию, которая будет получать массив чисел и возвращать сумму всех этих чисел. Причём мы планируем использовать функцию для очень больших массивов, занимающих много оперативной памяти. Сначала программист напишет так: PHP код:
Цитата:
PHP код:
|
Часовой пояс GMT +4, время: 10:25. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot