# 全局方法 全局方法就是 PHP 的全局函数,任意位置都可以调用,无需使用 use 字样。 ## getClassPath() 根据加载的用户编写的代码类名来获取类所在的文件路径。 === "src/Module/Example/Hello.php" ```php 你今天喝水了吗 - `*的天气怎么样` -> 德州的天气怎么样 - `把*翻译成*` -> 把茶翻译成英语 定义:`matchPattern($pattern, $context)` `$pattern` 为匹配模式,例如 `你今天*了吗`。 `$context` 为要判断是否匹配的内容。 返回值:`bool`,当为 true 时代表规则是匹配的,false 代表不匹配。 ```php matchPattern("*是个啥?", "996是个啥?"); // true matchPattern("我想听*唱歌", "你想听谁唱歌"); // false matchPattern("*把*翻译成*", "请把你好翻译成阿拉伯语"); // true ``` ## split_explode() 和 `explodeMsg()` 类似,用作分割字符串,不过此函数加入了对 `中文|数字` 两者的分割,也就是说中文和数字之间也会被分割。 定义:`split_explode($del, $str, $divide_en = false)` ```php split_explode(" ", "前进20 急啊急啊"); // ["前进","20","急啊急啊"] ``` `$del` 和 `explode()` 的第一个参数作用相同,作为初期分割的标志。 `$str` 表示待分割的内容。 `$divide_en` 表示是否分割中文和英文,如果为是,则中文和英文之间也会被分割开。 ## matchArgs() `matchPattern()` 的扩展,如果 `matchPattern()` 格式的字符串和模式匹配成功,则通过星号位置来提取星号匹配到的内容,参数同 `matchPattern()`。 ```php $r = matchArgs("把*翻译成*", "把日语翻译成英语"); // ["日语","英语"] ``` ## connectIsQQ() 判断当前 WebSocket 连接是否为 OneBot 标准的机器人客户端。 ## connectIsDefault() 判断连接是否是未定义类型的 WebSocket 连接。 ## connectIs() 判断连接是否是对应类型的 WebSocket 连接。 ```php connectIs("your_another_type_connect"); ``` ## set_coroutine_params() 设置当前上下文中的一些变量。 ```php set_coroutine_params(["data" => [ "post_type" => "message", ... ]]); ``` ## ctx() 别名:`context()`,获取当前协程的上下文,见 [上下文](/component/context/)。 ## zm_sleep() 协程版 `sleep()` 函数。 定义:`zm_sleep($s = 1)` `$s`:睡眠的时间:秒,可支持小数。(例如:0.001 代表 1 毫秒) 为什么不用 PHP 自带的 sleep 呢?因为炸毛框架是基于协程的,协程版 sleep 需要使用 Swoole 自带的 sleep。此函数做了一个简单的封装。 ```php zm_sleep(5); zm_sleep(0.05); ``` ## zm_exec() 执行系统命令,替代 PHP 的 `exec()`。 定义:`zm_exec($cmd)` 返回值: ```php array( 'code' => 0, // 进程退出的状态码 'signal' => 0, // 信号 'output' => 'hello world', // 输出内容 ); ``` ```php $result = zm_exec("echo 'hello world'")["output"]; ``` ## zm_cid() 获取当前协程的 ID,效果等同于 `\Swoole\Coroutine::getCid()`。 ## zm_yield() 挂起当前协程,直到手动恢复,效果等同于 `\Swoole\Coroutine::yield()`。 ## zm_resume() 恢复继续执行协程,效果等同于 `\Swoole\Coroutine::resume()`。 ```php $r = 0; function test() { echo "hello-1\n"; global $r; $r = zm_cid(); zm_yield(); echo "hello-2\n"; } go("test"); echo "hello-3\n"; zm_resume($r); ``` 输出结果: ``` hello-1 hello-3 hello-2 ``` ## server() 获取 Swoole Server 对象进行操作,效果等同于 `\ZM\Framework::$server`。 ```php echo server()->worker_id.PHP_EOL; // 0 ``` ## bot() 返回 ZMRobot 操作机器人 API 的对象。 对于默认的模式,如果框架连接了多个机器人实例,则会随机返回一个机器人的 API 实例。如果使用了单例模式,则返回单例模式的机器人 API 实例。 ```php bot()->sendPrivateMsg(123456, "你好啊!!"); // 等同于 ZMRobot::getRandom()->sendPrivateMsg(123456, "你好啊!!"); ``` ## zm_atomic() 获取计时器,效果同 `\ZM\Store\ZMAtomic::get($name)`。 定义:`zm_atmoic($name)` ## uuidgen() > 2.2.5 版本起可用。 生成一个随机的 uuid,支持大写或小写。 定义:`uuidgen($uppercase = false)` 当 `$uppercase` 为 `true` 时,返回的 uuid 中字母都是大写。 ## working_dir() > 2.2.6 版本起可用。 获取框架运行的工作目录。例如你是从 `/root/framework-starter/` 目录启动的框架,`vendor/bin/start server`,那么 `working_dir()` 返回的就是 `/root/framework-starter`。(注意,返回的目录最后没有斜杠,请自行添加。) ## getAllFdByConnectType() 获取同类型的所有连接的描述符 ID。 定义:`getAllFdByConnectType(string $type = 'default'): array` 当 `$type` 为 `qq` 时,则返回所有 OneBot 机器人接入的 WebSocket 连接号。 ## zm_dump() 更漂亮地输出变量值,可替代 `var_dump()`。 ```php class Pass { public $foo = 123; public $bar = ["a", "b"]; } $pass = new Pass(); $pass->obj = true; zm_dump($pass); ``` image-20210321193956832 ## zm_config() > v2.4.0 起可用。 同 `ZMConfig::get()`。 定义:`zm_config($name, $key = null)`。 有关 ZMConfig 模块的说明,见 [指南 - 基本配置](/guide/basic-config/)。 ```php zm_config("global"); //等同于 ZMConfig::get("global"); zm_config("global", "swoole"); //等同于 ZMConfig::get("global", "swoole"); ``` ## zm_info() > v2.4.0 起可用。(下面的 log 类也一样) 同 `Console::info($msg)`。 ## zm_debug() 同 `Console::debug($msg)`。 ## zm_warning() 同 `Console::warning($msg)`。 ## zm_success() 同 `Console::success($msg)`。 ## zm_error() 同 `Console::error($msg)`。 ## zm_verbose() 同 `Console::verbose($msg)`。