配置文件

每个Zephir扩展都有一个名为config.json的配置文件。 每当构建或生成扩展时,Zephir都会读取这个文件,它允许开发人员修改扩展或编译器的行为。

该文件使用JSON作为配置格式:

{
    "namespace": "test",
    "name": "Test Extension",
    "description": "My amazing extension",
    "author": "Tony Hawk",
    "version": "1.2.0"
}

此文件中定义的设置覆盖Zephir提供的任何默认设置。

支持以下设置:

api

用于为您的扩展配置自动生成的HTML文档。 path指定在何处创建与项目根相关的文档。 使用base-url生成sitemap.xml文件为您的文档。 theme用于设置用于生成文档的主题(通过name设置),以及主题支持传递的任何选项(通过options设置)。 最后,theme-directories被用来提供额外的搜索路径,以找到你想要的主题。

{
    "api": {
        "path": "doc/%version%",
        "base-url": "http://example.local/api/",
        "theme": {
            "name"   : "zephir",
            "options": {
                "github":           null,
                "analytics":        null,
                "main_color":       "#3E6496",
                "link_color":       "#3E6496",
                "link_hover_color": "#5F9AE7"
            }
        },
        "theme-directories": [
            "my/api/themes"
        ]
    }
}

author

开发扩展的公司、开发商、机构等:

{
    "author": "Tony Hawk"
}

backend

提供一种配置扩展所使用的Zend引擎后端的方法。 目前,仅支持templatepath,允许您在ZendEngine2 ZendEngine3之间进行选择:

{
    "backend": {
        "templatepath": "ZendEngine3"
    }
}

constants-sources

要将C源文件中的常量导入到项目中,请在此设置中列出文件的路径:

{
    "constants-sources": [
        "utils/math_constants.h"
    ]
}

description

扩展描述-任何文字描述您的扩展:

{
    "description": "My amazing extension"
}

destructors

此设置允许您提供一个或多个C函数在某些扩展生命周期事件上执行——具体来说,RSHUTDOWN(请求),PRSHUTDOWN (post请求),MSHUTDOWN (<0 >0 module1), <0 >2 GSHUTDOWN3 (<0 >4 globals5)。 查看lifecycle hooks章节了解更多信息。

{
    "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)"
                }
            ]
        }
    ]
}

extension-name

扩展的基本文件名。 它必须遵循与namespace设置相同的规则,如果没有给出>设置,则将其用作后备。

{
    "extension-name": "test"
}

external-dependencies

您可以在自己的扩展中直接包含来自另一个名称空间/扩展的类,在这里进行配置:

{
    "external-dependencies": {
        "My\\Awesome": "my/awesome/class.zep",
        "My\\Awful": "my/awful/class.zep"
    }
}

extra

包含额外的设置, 这些设置也可以像在命令行中一样传递。 目前,这是export-clases(生成从其他C代码访问类的头文件),和indent(选择使用tabsspaces缩进生成的文件中的代码):

{
    "extra": {
        "export-classes": true,
        "indent": "tabs"
    }
}

extra-cflags

您想要添加到编译过程中的任何附加标志:

{
    "extra-cflags": "-I/usr/local/Cellar/libevent/2.0.21_1/include"
}

extra-classes

如果你已经在C语言中实现了一个PHP类,你可以直接将它包含在你的扩展中,在这里进行配置:

{
    "extra-classes": [
        {
            "header": "utls/old_c_class/class.h",
            "source": "utils/old_c_class/class.c",
            "init": "old_c_class",
            "entry": "old_c_class_ce"
        }
    ]
}

extra-libs

您想要添加到编译过程中的任何其他库:

{
    "extra-libs": "-L/usr/local/Cellar/libevent/2.0.21_1/lib -levent"
}

extra-sources

任何其他文件,你想添加到编译过程-搜索目录是相对于ext文件夹您的项目:

{
    "extra-sources": [
        "utils/pi.c"
    ]
}

globals

扩展全局可用。 查看globals章节了解更多信息。

{
    "globals": {
        "my_setting_1": {
            "type": "bool",
            "default": true
        },
        "my_setting_2": {
            "type": "int",
            "default": 10
        }
    }
}

info

phpinfo() 信息. 查看phpinfo()章节了解更多信息。

{
    "info": [
        {
            "header": ["Directive", "Value"],
            "rows": [
                ["setting1", "value1"],
                ["setting2", "value2"]
            ]
        }
    ]
}

initializers

这个设置允许您提供一个或多个C函数在某些扩展生命周期事件上执行——具体来说,GINIT (globals), MINIT (module), RINIT (<0 >0 request1)。 查看lifecycle hooks章节了解更多信息。

{
    "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)"
                }
            ]
        }
    ]
}

name

在编译后的C代码中使用的扩展名-只能包含ascii字符:

{
    "name": "test"
}

namespace

扩展的名称空间-它必须是一个简单的标识符,对应于正则表达式[a- za - z0 -9\_]+:

{
    "namespace": "test"
}

optimizations

在当前项目中应该启用或禁用的编译器优化:

{
    "optimizations": {
        "static-type-inference": true,
        "static-type-inference-second-pass": true,
        "local-context-pass": false
    }
}

optimizer-dirs

你自己的优化器可以找到的目录-搜索目录是相对于根文件夹的项目:

{
    "optimizer-dirs": [
        "optimizers"
    ]
}

package-dependencies

声明库依赖关系(版本约束将被pkg-config检查,可以使用=>=<=,或*):

{
    "package-dependencies": {
        "openssl": "*",
        "libpng": ">= 0.1.0",
        "protobuf": "<= 2.6.1"
    }
}

prototype-dir

允许您提供描述构建自己的扩展所需的其他扩展的原型文件,因此它们不需要在构建阶段安装:

{
    "prototype-dir": {
        "igbinary": "prototypes",
        "session": "prototypes"
    }
}

requires

允许您列出其他扩展所需的建立/使用您自己:

{
    "requires": {
        "extensions": [
            "igbinary",
            "session"
        ]
    }
}

silent

允许您列出其他扩展所需的建立/使用您自己:

{
    "silent": false
}

stubs

此设置允许调整IDE文档存根生成的方式。 path集,其中应该创建存根,而stubs-run-after-generate集,当您的代码被编译为C时,是否自动(重新)构建存根:

{
    "stubs": {
        "path": "ide/%version%/%namespace%/",
        "stubs-run-after-generate": false
    }
}

verbose

在错误消息中显示由zephir命令生成的异常的更多细节(也可以启用-v,或禁用-V):

{
    "verbose": false
}

version

扩展版本-必须遵循正则表达式[0-9]+\.[0-9]+\.[0-9]+:

{
    "version": "1.2.0"
}

warnings

在当前项目中应该启用或禁用的编译器警告:

{
    "warnings": {
        "unused-variable": true,
        "unused-variable-external": false,
        "possible-wrong-parameter": true,
        "possible-wrong-parameter-undefined": false,
        "nonexistent-function": true,
        "nonexistent-class": true
    }
}