Большинство ресурсов PHP никогда не касаются управления памятью, потому что сам язык довольно хорош для этого. Однако в PHP вы часто сталкиваетесь с внешними ресурсами, которые не являются памятью - дескрипторами базы данных, сеансами, транзакциями базы данных и т. Д. Этими внешними ресурсами можно было бы управлять наиболее чисто, используя некоторую форму объекта RAII.
Сначала я думал, что PHP использует схему сбора мусора, аналогичную JVM или CLR, где концепция деструктора не существует. (Помните: Каждый думает о сборке мусора неправильно - финализаторы не являются деструкторами!) Есть специальный метод __destruct
, но я подумал, что это был "финализатор", похожий на финализатор Java или C #. По этой причине вы не можете использовать RAII на JVM или CLR (блоки C # using
позволяют получить около 95% пути, но это немного по-другому ...).
Однако, Google, похоже, указывает, что PHP поддерживает шаблон RAII , хотя я не могу найти подтверждение этого в документации по PHP. Поддерживает ли язык это и помещает логику очистки в __destruct
, достаточную для выполнения задач RAII?