Некоторые вопросы о производительности PHP объектов - PullRequest
2 голосов
/ 24 января 2010

Прямо сейчас, так как я новичок в использовании объектов в PHP, я чувствую, что в своей голове я считаю объект PHP чем-то большим и громоздким. Это заставляет меня хотеть использовать их реже, я чувствую, что беру действительно простой код и очень усложняю его, помещая его в объекты.

Если у меня есть база данных, кеш, сессия, ядро ​​и пользовательский объект, и мне нужно получить к ним доступ практически внутри друг друга и в других не упомянутых классах, я решил хранить все это внутри объекта реестра. Так что из-за моих ограниченных знаний о том, как работают объекты, мне почти кажется, что передача объекта реестра в простой объект - это нечто действительно большое. Как будто реестр держит эти 5 объектов внутри него. Это неправильно? Действительно ли регистр передает только ссылку на то, где эти объекты находятся в памяти? Или я действительно передаю действительно БОЛЬШОЙ объект во все мои объекты?

Извините, если это не имеет никакого смысла, надеюсь, это так. Я просто пытаюсь лучше понять, как они работают в отношении производительности.

Ответы [ 2 ]

5 голосов
/ 24 января 2010

В PHP5 все объекты по умолчанию передаются по ссылке. Проще говоря, ссылка просто «указывает» на фактическое расположение объекта или переменной в памяти (будьте осторожны с терминологией, поскольку «указатели» функционально отличаются от «ссылок» PHP, но концептуально они очень похожи).

Когда вы передаете объекты по ссылке, вы просто передаете очень маленькие индикаторы памяти. Сами объекты не перемещаются ... они остаются постоянными в памяти и не перемещаются, не перезаписываются или что-либо еще. Это включает в себя, когда вы помещаете объекты в другие объекты ... ссылки просто корректируются.

Преимущества, которые ОО-дизайн и программирование придают вашему коду, обычно намного превосходят незначительные накладные расходы, связанные с управлением объектами. Будьте уверены, что интерпретатор PHP делает все возможное для оптимального управления объектами, и вы не несете дополнительных затрат, передавая объекты вокруг, чем если бы вы передавали ссылки на целые числа или строки. Опорные накладные расходы очень минимальны.

1 голос
/ 24 января 2010

Рекомендуемое чтение: PHP References

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...