5.0 KiB
全局方法
全局方法就是 PHP 的全局函数,任意位置都可以调用,无需使用 use 字样。
getClassPath()
根据加载的用户编写的代码类名来获取类所在的文件路径。
=== "src/Module/Example/Hello.php"
```php
<?php
namespace Module\Example;
class Hello { ... }
```
=== "src/Module/Example/Start.php"
```php
<?php
namespace Module\Example;
use ZM\Annotation\Swoole\OnStart;
class Start {
/**
* @OnStart()
*/
public function onStart() {
Console::info("Path: ".getClassPath(Hello::class));
}
}
```
=== "输出结果"
```
[11:12:02] [I] [#0] Path: /mnt/d/project/zhamao-framework/src/Module/Example/Hello.ph
```
explodeMsg()
切割字符串的函数,支持多空格,换行,tab。
定义:explodeMsg($msg, $ban_comma = false)
$s = explodeMsg("你好啊 你好你好\n我还有多个空格 哈哈哈");
echo json_encode($s, 128|256); // ["你好啊","你好你好","我还有多个空格","哈哈哈"]
unicode_decode()
Unicode 解码,一般用于被转义的 Unicode 转回来。
echo unicode_decode("\u4f60\u597d"); // 你好
matchPattern()
根据星号匹配字符串(非正则表达式)。
匹配示例:
你今天*了吗-> 你今天喝水了吗*的天气怎么样-> 德州的天气怎么样把*翻译成*-> 把茶翻译成英语
定义:matchPattern($pattern, $context)
$pattern 为匹配模式,例如 你今天*了吗。
$context 为要判断是否匹配的内容。
返回值:bool,当为 true 时代表规则是匹配的,false 代表不匹配。
matchPattern("*是个啥?", "996是个啥?"); // true
matchPattern("我想听*唱歌", "你想听谁唱歌"); // false
matchPattern("*把*翻译成*", "请把你好翻译成阿拉伯语"); // true
split_explode()
和 explodeMsg() 类似,用作分割字符串,不过此函数加入了对 中文|数字 两者的分割,也就是说中文和数字之间也会被分割。
定义:split_explode($del, $str, $divide_en = false)
split_explode(" ", "前进20 急啊急啊"); // ["前进","20","急啊急啊"]
$del 和 explode() 的第一个参数作用相同,作为初期分割的标志。
$str 表示待分割的内容。
$divide_en 表示是否分割中文和英文,如果为是,则中文和英文之间也会被分割开。
matchArgs()
matchPattern() 的扩展,如果 matchPattern() 格式的字符串和模式匹配成功,则通过星号位置来提取星号匹配到的内容,参数同 matchPattern()。
$r = matchArgs("把*翻译成*", "把日语翻译成英语"); // ["日语","英语"]
connectIsQQ()
判断当前 WebSocket 连接是否为 OneBot 标准的机器人客户端。
connectIsDefault()
判断连接是否是未定义类型的 WebSocket 连接。
connectIs()
判断连接是否是对应类型的 WebSocket 连接。
connectIs("your_another_type_connect");
set_coroutine_params()
设置当前上下文中的一些变量。
set_coroutine_params(["data" => [
"post_type" => "message",
...
]]);
ctx()
别名:context(),获取当前协程的上下文,见 上下文。
zm_debug()
同 Console::debug($msg)。
zm_sleep()
协程版 sleep() 函数。
定义:zm_sleep($s = 1)
$s:睡眠的时间:秒,可支持小数。(例如:0.001 代表 1 毫秒)
为什么不用 PHP 自带的 sleep 呢?因为炸毛框架是基于协程的,协程版 sleep 需要使用 Swoole 自带的 sleep。此函数做了一个简单的封装。
zm_sleep(5);
zm_sleep(0.05);
zm_exec()
执行系统命令,替代 PHP 的 exec()。
定义:zm_exec($cmd)
返回值:
array(
'code' => 0, // 进程退出的状态码
'signal' => 0, // 信号
'output' => 'hello world', // 输出内容
);
$result = zm_exec("echo 'hello world'")["output"];
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);
输出结果:
hello-1
hello-3
hello-2
server()
获取 Swoole Server 对象进行操作,效果等同于 \ZM\Framework::$server。
echo server()->worker_id.PHP_EOL; // 0
bot()
返回 ZMRobot 操作机器人 API 的对象。
对于默认的模式,如果框架连接了多个机器人实例,则会随机返回一个机器人的 API 实例。如果使用了单例模式,则返回单例模式的机器人 API 实例。
bot()->sendPrivateMsg(123456, "你好啊!!");
// 等同于 ZMRobot::getRandom()->sendPrivateMsg(123456, "你好啊!!");