# 全局方法

全局方法就是 PHP 的全局函数,任意位置都可以调用,无需使用 use 字样。

# getClassPath()

源码 (opens new window)

根据加载的用户编写的代码类名来获取类所在的文件路径。

src/Module/Example/Hello.php

<?php
namespace Module\Example;
class Hello {  ...  }
1
2
3

src/Module/Example/Start.php

<?php
namespace Module\Example;
use ZM\Annotation\Swoole\OnStart;
class Start {
    /**
     * @OnStart()
     */
    public function onStart() {
        Console::info("Path: ".getClassPath(Hello::class));
    }
}
1
2
3
4
5
6
7
8
9
10
11

输出结果

[11:12:02] [I] [#0] Path: /mnt/d/project/zhamao-framework/src/Module/Example/Hello.ph
1

# explodeMsg()

源码 (opens new window)

切割字符串的函数,支持多空格,换行,tab。

定义:explodeMsg($msg, $ban_comma = false)

$s = explodeMsg("你好啊 你好你好\n我还有多个空格      哈哈哈");
echo json_encode($s, 128|256); // ["你好啊","你好你好","我还有多个空格","哈哈哈"]
1
2

# unicode_decode()

源码 (opens new window)

Unicode 解码,一般用于被转义的 Unicode 转回来。

echo unicode_decode("\u4f60\u597d"); // 你好
1

# matchPattern()

源码 (opens new window)

根据星号匹配字符串(非正则表达式)。

匹配示例:

  • 你今天*了吗 -> 你今天喝水了吗
  • *的天气怎么样 -> 德州的天气怎么样
  • 把*翻译成* -> 把茶翻译成英语

定义:matchPattern($pattern, $context)

$pattern 为匹配模式,例如 你今天*了吗

$context 为要判断是否匹配的内容。

返回值:bool,当为 true 时代表规则是匹配的,false 代表不匹配。

matchPattern("*是个啥?", "996是个啥?"); // true
matchPattern("我想听*唱歌", "你想听谁唱歌"); // false
matchPattern("*把*翻译成*", "请把你好翻译成阿拉伯语"); // true
1
2
3

# split_explode()

源码 (opens new window)

explodeMsg() 类似,用作分割字符串,不过此函数加入了对 中文|数字 两者的分割,也就是说中文和数字之间也会被分割。

定义:split_explode($del, $str, $divide_en = false)

split_explode(" ", "前进20 急啊急啊"); // ["前进","20","急啊急啊"]
1

$delexplode() 的第一个参数作用相同,作为初期分割的标志。

$str 表示待分割的内容。

$divide_en 表示是否分割中文和英文,如果为是,则中文和英文之间也会被分割开。

# matchArgs()

源码 (opens new window)

matchPattern() 的扩展,如果 matchPattern() 格式的字符串和模式匹配成功,则通过星号位置来提取星号匹配到的内容,参数同 matchPattern()

$r = matchArgs("把*翻译成*", "把日语翻译成英语"); // ["日语","英语"]
1

# connectIsQQ()

判断当前 WebSocket 连接是否为 OneBot 标准的机器人客户端。

# connectIsDefault()

判断连接是否是未定义类型的 WebSocket 连接。

# connectIs()

判断连接是否是对应类型的 WebSocket 连接。

connectIs("your_another_type_connect");
1

# set_coroutine_params()

设置当前上下文中的一些变量。

set_coroutine_params(["data" => [
    "post_type" => "message",
    ...
]]);
1
2
3
4

# ctx()

别名:context(),获取当前协程的上下文,见 上下文

# zm_sleep()

协程版 sleep() 函数。

定义:zm_sleep($s = 1)

$s:睡眠的时间:秒,可支持小数。(例如:0.001 代表 1 毫秒)

为什么不用 PHP 自带的 sleep 呢?因为炸毛框架是基于协程的,协程版 sleep 需要使用 Swoole 自带的 sleep。此函数做了一个简单的封装。

zm_sleep(5);
zm_sleep(0.05);
1
2

# zm_exec()

执行系统命令,替代 PHP 的 exec()

定义:zm_exec($cmd)

返回值:

array(
    'code'   => 0,  // 进程退出的状态码
    'signal' => 0,  // 信号
    'output' => 'hello world', // 输出内容
);
1
2
3
4
5
$result = zm_exec("echo 'hello world'")["output"];
1

# zm_cid()

获取当前协程的 ID,效果等同于 \Swoole\Coroutine::getCid()

# zm_yield()

挂起当前协程,直到手动恢复,效果等同于 \Swoole\Coroutine::yield()

# zm_resume()

恢复继续执行协程,效果等同于 \Swoole\Coroutine::resume()

$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);
1
2
3
4
5
6
7
8
9
10
11
12

输出结果:

hello-1
hello-3
hello-2
1
2
3

# server()

获取 Swoole Server 对象进行操作,效果等同于 \ZM\Framework::$server

echo server()->worker_id.PHP_EOL; // 0
1

# bot()

返回 ZMRobot 操作机器人 API 的对象。

对于默认的模式,如果框架连接了多个机器人实例,则会随机返回一个机器人的 API 实例。如果使用了单例模式,则返回单例模式的机器人 API 实例。

bot()->sendPrivateMsg(123456, "你好啊!!");
// 等同于 ZMRobot::getRandom()->sendPrivateMsg(123456, "你好啊!!");
1
2

# zm_atomic()

获取计时器,效果同 \ZM\Store\ZMAtomic::get($name)

定义:zm_atmoic($name)

# uuidgen()

2.2.5 版本起可用。

生成一个随机的 uuid,支持大写或小写。

定义:uuidgen($uppercase = false)

$uppercasetrue 时,返回的 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

$typeqq 时,则返回所有 OneBot 机器人接入的 WebSocket 连接号。

# zm_dump()

更漂亮地输出变量值,可替代 var_dump()

class Pass {
    public $foo = 123;
    public $bar = ["a", "b"];
}
$pass = new Pass();
$pass->obj = true;
zm_dump($pass);
1
2
3
4
5
6
7

# zm_config()

v2.4.0 起可用。

ZMConfig::get()

定义:zm_config($name, $key = null)

有关 ZMConfig 模块的说明,见 指南 - 基本配置

zm_config("global"); //等同于 ZMConfig::get("global");
zm_config("global", "swoole"); //等同于 ZMConfig::get("global", "swoole");
1
2

# 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)