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

Рассмотрим следующую схему:

Прерывания регистрируются в файле config.json. Как вы можете видеть на диаграмме выше, существует четыре типа прерываний  - глобальные, инициализаторы, деструкторы и информация. Каждый из них имеет свои собственные настройки корневого уровня в конфигурации, и оба:  «globals» и: «info» имеют свои собственные главы. В этой главе рассматриваются другие две настройки.

Можно зарегистрировать include иcode для поддерживаемых событий инициализации и завершения работы каждой группы. Код может быть любым, Какой вам заблагорассудится, но рекомендуется один вызов функции на каждое прерывание, как для ясности в конфигурации, так и для сохранения кода в других файлах как можно больше. Параметр include или code можно пропустить, но повторяющиеся параметры include удаляются, поэтому их можно безопасно повторить. Рекомендуется указать оба значения, чтобы было легче увидеть, какие из них нужны, и чтобы было проще добавлять и удалять прерывания по отдельности.

инициализаторы

Блок инициализаторов выглядит примерно так:

{
    "initializers": [
        {
            "globals": [
                {
                    "include": "my/awesome/library.h",
                    "code": "setup_globals_deps(TSRMLS_C)"
                }
            ],
            "module": [
                {
                    "include": "my/awesome/library.h",
                    "code": "setup_module_deps(TSRMLS_C)"
                }
            ],
            "request": [
                {
                    "include": "my/awesome/library.h",
                    "code": "some_c_function(TSRMLS_C)"
                },
                {
                    "include": "my/awful/library.h",
                    "code": "some_other_c_function(TSRMLS_C)"
                }
            ]
        }
    ]
}

деструкторы

И блок деструкторов выглядит вот так:

{
    "destructors": [
        {
            "request": [
                {
                    "include": "my/awesome/library.h",
                    "code": "c_function_for_shutting_down(TSRMLS_C)"
                },
                {
                    "include": "my/awful/library.h",
                    "code": "some_other_c_function_than_the_other_ones(TSRMLS_C)"
                }
            ],
            "post-request": [
                {
                    "include": "my/awesome/library.h",
                    "code": "c_function_for_cleaning_up_after_the_response_is_sent(TSRMLS_C)"
                }
            ],
            "module": [
                {
                    "include": "my/awesome/library.h",
                    "code": "release_module_deps(TSRMLS_C)"
                }
            ],
            "globals": [
                {
                    "include": "my/awesome/library.h",
                    "code": "release_globals_deps(TSRMLS_C)"
                }
            ]
        }
    ]
}

 

Содержание.

Предыдушая  Следующая