Для чего нужна папка / php - Nn / ext
Он содержит расширения PHP, то есть вещи, построенные поверх Zend Engine, которые фактически предоставляют функции PHP и встроенные объекты.
Нужно ли перекомпилировать функции в папке ext при каждом изменении?
Да, если вы хотите, чтобы изменение было отражено в двоичных файлах.
Превышают ли функции в папке ext (если они имеют то же имя, что и функции Zend), приоритет над функциями Zend.
Вы ошибаетесь, Zend Engine не определяет функцию PHP fopen
. На самом деле Zend Engine не предоставляет функций PHP. Он может быть скомпилирован независимо и использован для чего-то совершенно не связанного с PHP. Zend Engine на самом деле предоставляет несколько функций PHP (объявлено с
ZEND_FUNCTION
), см. zend_builtin_functions.c
. PHP_FUNCTION
на самом деле является синонимом ZEND_FUNCTION
, но полагаться на ZEND_FUNCTION
для объявления функций PHP является нарушением абстракции.
Возможно, вы путаете функцию PHP-функции (объявленную внутри как PHP_FUNCTION(fopen)
) с другой функцией C, называемой fopen
(например, в стандартной библиотеке C).
Относительно того, предоставляет ли Zend функцию открытия файла ... Что я мог найти:
- A true global это указатель на открытую функцию в zend.c . Это используется
zend_stream_open
, чья иерархия вызовов предлагает использовать при открытии include
файлов.
- Небольшая оболочка вокруг стандартной библиотеки C, которая использует запасное значение для указанного глобала.
Я предполагаю, что причина предоставления глобала указателем на функцию заключается в том, что его можно заменить, например, на TSRM или расширение Phar.