宏定义

    目录

    支持在 imi 框架中使用宏定义。

    支持在 PHP 代码中使用类似 C/C++ 中的宏,进行代码预编译。

    可以方便兼容不同版本和环境下运行的 PHP 代码。

    在一些场景可以通过预定义常量,来提升性能,减少运行时判断。

    本组件基于 Yurunsoft/php-macro 组件,该组件由宇润主导开发。

    这是 imi v2.1.0 引入的实验性新特性

    Composer

    本项目可以使用composer安装,遵循psr-4自动加载规则,在你的 composer.json 中加入下面的内容:

    {
        "require": {
            "imiphp/imi-macro": "~2.1.0"
        }
    }

    支持的宏

    文件格式

    支持的文件名:*.php*.macro

    .php:

    需要在文件中任意位置顶格加入代码:

    # macro
    该代码不加不生效

    A.php 执行时,会在相同目录生成处理后的 A.php.macro.php

    .macro:

    需要创建同名的 .php 文件,如 A.php,内容为空即可。

    再创建 A.macro 编写 PHP 代码。

    执行时,会在相同目录生成处理后的 A.macro.php

    常量

    宏:#define#const#ifdef#ifndef

    例子:

    #ifndef IN_SWOOLE
        # define IN_SWOOLE extension_loaded('swoole')
    #endif
    #ifdef IN_SWOOLE
    #if IN_SWOOLE
    \Co\run(function(){
        echo 'hello world';
    });
    #endif
    #endif
    注意:使用宏定义的常量,仅在生成代码时有效,运行时无效

    条件语句

    宏:#if#else#elif#endif

    例子:

    <?php
    #if version_compare(\PHP_VERSION, '8.0', '>=')
    function test(): string|false
    #else
    /**
     * @return string|false
     */
    function test()
    #endif
    {
        return 'hello world';
    }

    PHP >= 8.0 环境下生成的代码:

    <?php
    function test(): string|false
    {
        return 'hello world';
    }

    PHP < 8.0 环境下生成的代码:

    <?php
    /**
     * @return string|false
     */
    function test()
    {
        return 'hello world';
    }