zhamao-framework/components/common/global-defines.html
2024-09-19 08:29:13 +00:00

136 lines
79 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<title>全局方法和常量 | 炸毛框架 v3</title>
<meta name="description" content="">
<meta name="generator" content="VuePress 1.9.10">
<link rel="icon" href="/logo_trans.png">
<script>
var _hmt = _hmt || [];
(function () {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?f0f276cefa10aa31a20ae3815a50b795";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
<meta name="description" content="一个高性能聊天机器人 + Web 框架">
<link rel="preload" href="/assets/css/0.styles.de075592.css" as="style"><link rel="preload" href="/assets/js/app.cf958133.js" as="script"><link rel="preload" href="/assets/js/2.4c04991c.js" as="script"><link rel="preload" href="/assets/js/1.d8755a39.js" as="script"><link rel="preload" href="/assets/js/32.7fc05474.js" as="script"><link rel="prefetch" href="/assets/js/10.960912c3.js"><link rel="prefetch" href="/assets/js/11.cd171694.js"><link rel="prefetch" href="/assets/js/12.ff9ca1d1.js"><link rel="prefetch" href="/assets/js/13.a56deac8.js"><link rel="prefetch" href="/assets/js/14.b222a011.js"><link rel="prefetch" href="/assets/js/15.31489867.js"><link rel="prefetch" href="/assets/js/16.e921dbc4.js"><link rel="prefetch" href="/assets/js/17.58f730d3.js"><link rel="prefetch" href="/assets/js/18.26c46c49.js"><link rel="prefetch" href="/assets/js/19.ee0bfd3b.js"><link rel="prefetch" href="/assets/js/20.bb3578b8.js"><link rel="prefetch" href="/assets/js/21.e66f7fe5.js"><link rel="prefetch" href="/assets/js/22.cba8ca48.js"><link rel="prefetch" href="/assets/js/23.cb49f41c.js"><link rel="prefetch" href="/assets/js/24.d95b175a.js"><link rel="prefetch" href="/assets/js/25.b0d69869.js"><link rel="prefetch" href="/assets/js/26.8e7089c0.js"><link rel="prefetch" href="/assets/js/27.333a53a1.js"><link rel="prefetch" href="/assets/js/28.df4b871c.js"><link rel="prefetch" href="/assets/js/29.5427ad45.js"><link rel="prefetch" href="/assets/js/3.07fc018e.js"><link rel="prefetch" href="/assets/js/30.7cb7445a.js"><link rel="prefetch" href="/assets/js/31.5c4bb546.js"><link rel="prefetch" href="/assets/js/33.9684a4f8.js"><link rel="prefetch" href="/assets/js/34.83e32a28.js"><link rel="prefetch" href="/assets/js/35.95d03df6.js"><link rel="prefetch" href="/assets/js/36.80aace42.js"><link rel="prefetch" href="/assets/js/37.1eaed2ee.js"><link rel="prefetch" href="/assets/js/38.75fa7a1c.js"><link rel="prefetch" href="/assets/js/39.117f5802.js"><link rel="prefetch" href="/assets/js/4.6623271b.js"><link rel="prefetch" href="/assets/js/40.57eba153.js"><link rel="prefetch" href="/assets/js/41.89c4a7c8.js"><link rel="prefetch" href="/assets/js/42.d8f92f99.js"><link rel="prefetch" href="/assets/js/43.5ee83631.js"><link rel="prefetch" href="/assets/js/44.c09b5b0c.js"><link rel="prefetch" href="/assets/js/45.bd850606.js"><link rel="prefetch" href="/assets/js/46.732b1cef.js"><link rel="prefetch" href="/assets/js/47.2a872d0d.js"><link rel="prefetch" href="/assets/js/48.959e18f4.js"><link rel="prefetch" href="/assets/js/49.a9bb32f7.js"><link rel="prefetch" href="/assets/js/5.073233e8.js"><link rel="prefetch" href="/assets/js/50.ca90a854.js"><link rel="prefetch" href="/assets/js/51.79142530.js"><link rel="prefetch" href="/assets/js/52.fe63ad16.js"><link rel="prefetch" href="/assets/js/53.ed84845a.js"><link rel="prefetch" href="/assets/js/54.3ab7e492.js"><link rel="prefetch" href="/assets/js/55.9028e407.js"><link rel="prefetch" href="/assets/js/56.8173f798.js"><link rel="prefetch" href="/assets/js/57.2166b068.js"><link rel="prefetch" href="/assets/js/58.7c52b6bf.js"><link rel="prefetch" href="/assets/js/59.e9965a7b.js"><link rel="prefetch" href="/assets/js/60.f277436c.js"><link rel="prefetch" href="/assets/js/61.3712f8fe.js"><link rel="prefetch" href="/assets/js/8.899a0731.js"><link rel="prefetch" href="/assets/js/9.e2e8da12.js"><link rel="prefetch" href="/assets/js/vendors~docsearch.303532f0.js">
<link rel="stylesheet" href="/assets/css/0.styles.de075592.css">
</head>
<body>
<div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="ant-row"><div class="nav-button"><i aria-label="icon: bars" class="anticon anticon-bars"><svg viewBox="0 0 1024 1024" focusable="false" data-icon="bars" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M912 192H328c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h584c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 284H328c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h584c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 284H328c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h584c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM104 228a56 56 0 1 0 112 0 56 56 0 1 0-112 0zm0 284a56 56 0 1 0 112 0 56 56 0 1 0-112 0zm0 284a56 56 0 1 0 112 0 56 56 0 1 0-112 0z"></path></svg></i> <span></span></div> <div class="ant-col ant-col-xs-24 ant-col-sm-24 ant-col-md-6 ant-col-lg-6 ant-col-xl-5 ant-col-xxl-4"><a href="/" class="router-link-active home-link"><img src="/logo_trans.png" alt="炸毛框架 v3" class="logo"> <span class="site-name">炸毛框架 v3</span></a> <div class="search-box mobile-search"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div></div> <div class="nav-space-between ant-col ant-col-xs-0 ant-col-sm-0 ant-col-md-18 ant-col-lg-18 ant-col-xl-19 ant-col-xxl-20"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><ul role="menu" id="nav" class="ant-menu ant-menu-horizontal ant-menu-root ant-menu-light"><li role="menuitem" class="ant-menu-submenu ant-menu-submenu-horizontal ant-menu-overflowed-submenu" style="display:none;"><div aria-haspopup="true" class="ant-menu-submenu-title"><span>···</span><i class="ant-menu-submenu-arrow"></i></div></li><li role="menuitem" class="ant-menu-item"><a href="/guide/">
指南
</a></li><li role="menuitem" class="ant-menu-submenu ant-menu-submenu-horizontal ant-menu-overflowed-submenu" style="display:none;"><div aria-haspopup="true" class="ant-menu-submenu-title"><span>···</span><i class="ant-menu-submenu-arrow"></i></div></li><li role="menuitem" class="ant-menu-item"><a href="/event/">
事件
</a></li><li role="menuitem" class="ant-menu-submenu ant-menu-submenu-horizontal ant-menu-overflowed-submenu" style="display:none;"><div aria-haspopup="true" class="ant-menu-submenu-title"><span>···</span><i class="ant-menu-submenu-arrow"></i></div></li><li role="menuitem" class="ant-menu-item"><a href="/components/bot/bot-context.html">
组件
</a></li><li role="menuitem" class="ant-menu-submenu ant-menu-submenu-horizontal ant-menu-overflowed-submenu" style="display:none;"><div aria-haspopup="true" class="ant-menu-submenu-title"><span>···</span><i class="ant-menu-submenu-arrow"></i></div></li><li role="menuitem" class="ant-menu-item"><a href="/plugins/management.html">
插件
</a></li><li role="menuitem" class="ant-menu-submenu ant-menu-submenu-horizontal ant-menu-overflowed-submenu" style="display:none;"><div aria-haspopup="true" class="ant-menu-submenu-title"><span>···</span><i class="ant-menu-submenu-arrow"></i></div></li><li role="menuitem" class="ant-menu-item"><a href="/advanced/">
进阶
</a></li><li role="menuitem" class="ant-menu-submenu ant-menu-submenu-horizontal ant-menu-overflowed-submenu" style="display:none;"><div aria-haspopup="true" class="ant-menu-submenu-title"><span>···</span><i class="ant-menu-submenu-arrow"></i></div></li><li role="menuitem" class="ant-menu-item"><a href="/update/v3.html">
更新日志
</a></li><li role="menuitem" class="ant-menu-submenu ant-menu-submenu-horizontal ant-menu-overflowed-submenu" style="display:none;"><div aria-haspopup="true" class="ant-menu-submenu-title"><span>···</span><i class="ant-menu-submenu-arrow"></i></div></li><li role="menuitem" class="ant-menu-item"><a href="/doxy/" target="_blank">
API 文档
<i aria-label="icon: link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 0 0-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 0 0-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 0 0 0 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 0 0 0 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 0 0-11.3 0L372.3 598.7a8.03 8.03 0 0 0 0 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></i></a></li><li role="menuitem" class="ant-menu-submenu ant-menu-submenu-horizontal ant-menu-overflowed-submenu" style="display:none;"><div aria-haspopup="true" class="ant-menu-submenu-title"><span>···</span><i class="ant-menu-submenu-arrow"></i></div></li><li role="menuitem" class="ant-menu-item"><a href="https://docs-v2.zhamao.xin/" target="_blank">
炸毛框架 v2
<i aria-label="icon: link" class="anticon anticon-link"><svg viewBox="64 64 896 896" focusable="false" data-icon="link" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M574 665.4a8.03 8.03 0 0 0-11.3 0L446.5 781.6c-53.8 53.8-144.6 59.5-204 0-59.5-59.5-53.8-150.2 0-204l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3l-39.8-39.8a8.03 8.03 0 0 0-11.3 0L191.4 526.5c-84.6 84.6-84.6 221.5 0 306s221.5 84.6 306 0l116.2-116.2c3.1-3.1 3.1-8.2 0-11.3L574 665.4zm258.6-474c-84.6-84.6-221.5-84.6-306 0L410.3 307.6a8.03 8.03 0 0 0 0 11.3l39.7 39.7c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c53.8-53.8 144.6-59.5 204 0 59.5 59.5 53.8 150.2 0 204L665.3 562.6a8.03 8.03 0 0 0 0 11.3l39.8 39.8c3.1 3.1 8.2 3.1 11.3 0l116.2-116.2c84.5-84.6 84.5-221.5 0-306.1zM610.1 372.3a8.03 8.03 0 0 0-11.3 0L372.3 598.7a8.03 8.03 0 0 0 0 11.3l39.6 39.6c3.1 3.1 8.2 3.1 11.3 0l226.4-226.4c3.1-3.1 3.1-8.2 0-11.3l-39.5-39.6z"></path></svg></i></a></li><li role="menuitem" class="ant-menu-submenu ant-menu-submenu-horizontal ant-menu-overflowed-submenu" style="visibility:hidden;position:absolute;"><div aria-haspopup="true" class="ant-menu-submenu-title"><span>···</span><i class="ant-menu-submenu-arrow"></i></div></li></ul> <ul class="extra-group"><li><a href="https://github.com/zhamao-robot/zhamao-framework" target="_blank" rel="noopener noreferrer" class="repo-link"><i aria-label="icon: github" class="anticon anticon-github"><svg viewBox="64 64 896 896" focusable="false" data-icon="github" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M511.6 76.3C264.3 76.2 64 276.4 64 523.5 64 718.9 189.3 885 363.8 946c23.5 5.9 19.9-10.8 19.9-22.2v-77.5c-135.7 15.9-141.2-73.9-150.3-88.9C215 726 171.5 718 184.5 703c30.9-15.9 62.4 4 98.9 57.9 26.4 39.1 77.9 32.5 104 26 5.7-23.5 17.9-44.5 34.7-60.8-140.6-25.2-199.2-111-199.2-213 0-49.5 16.3-95 48.3-131.7-20.4-60.5 1.9-112.3 4.9-120 58.1-5.2 118.5 41.6 123.2 45.3 33-8.9 70.7-13.6 112.9-13.6 42.4 0 80.2 4.9 113.5 13.9 11.3-8.6 67.3-48.8 121.3-43.9 2.9 7.7 24.7 58.3 5.5 118 32.4 36.8 48.9 82.7 48.9 132.3 0 102.2-59 188.1-200 212.9a127.5 127.5 0 0 1 38.1 91v112.5c.8 9 0 17.9 15 17.9 177.1-59.7 304.6-227 304.6-424.1 0-247.2-200.4-447.3-447.5-447.3z"></path></svg></i></a></li> <!----></ul></nav></div></div> <!----></header> <aside class="sidebar"><!----> <ul class="sidebar-links"><li><a href="/components/" aria-current="page" title="组件" class="sidebar-link">组件</a></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>机器人组件</span> <span class="arrow right"><i aria-label="icon: down" class="anticon anticon-down"><svg viewBox="64 64 896 896" focusable="false" data-icon="down" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"></path></svg></i></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>HTTP 组件</span> <span class="arrow right"><i aria-label="icon: down" class="anticon anticon-down"><svg viewBox="64 64 896 896" focusable="false" data-icon="down" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"></path></svg></i></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading open"><span>框架通用组件</span> <span class="arrow down"><i aria-label="icon: down" class="anticon anticon-down"><svg viewBox="64 64 896 896" focusable="false" data-icon="down" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"></path></svg></i></span></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/components/common/class-alias.html" title="类全局别名" class="sidebar-link">类全局别名</a></li><li><a href="/components/common/global-defines.html" aria-current="page" title="全局方法和常量" class="active sidebar-link">全局方法和常量</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#全局常量" title="全局常量" class="sidebar-link">全局常量</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#框架基本全局常量" title="框架基本全局常量" class="sidebar-link">框架基本全局常量</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#多进程全局常量" title="多进程全局常量" class="sidebar-link">多进程全局常量</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#错误全局常量" title="错误全局常量" class="sidebar-link">错误全局常量</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#机器人回复模式常量" title="机器人回复模式常量" class="sidebar-link">机器人回复模式常量</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#机器人询问模式常量" title="机器人询问模式常量" class="sidebar-link">机器人询问模式常量</a></li></ul></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#全局方法" title="全局方法" class="sidebar-link">全局方法</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#zm-dir" title="zm_dir()" class="sidebar-link">zm_dir()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#zm-exec" title="zm_exec()" class="sidebar-link">zm_exec()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#zm-sleep" title="zm_sleep()" class="sidebar-link">zm_sleep()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#coroutine" title="coroutine()" class="sidebar-link">coroutine()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#zm-instance-id" title="zminstanceid()" class="sidebar-link">zminstanceid()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#logger" title="logger()" class="sidebar-link">logger()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#is-assoc-array" title="isassocarray()" class="sidebar-link">isassocarray()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#match-pattern" title="match_pattern()" class="sidebar-link">match_pattern()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#segment" title="segment()" class="sidebar-link">segment()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#middleware" title="middleware()" class="sidebar-link">middleware()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#container" title="container()" class="sidebar-link">container()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#resolve" title="resolve()" class="sidebar-link">resolve()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#db" title="db()" class="sidebar-link">db()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#zm-sqlite" title="zm_sqlite()" class="sidebar-link">zm_sqlite()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#sql-builder" title="sql_builder()" class="sidebar-link">sql_builder()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#zm-sqlite-builder" title="zmsqlitebuilder()" class="sidebar-link">zmsqlitebuilder()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#redis" title="redis()" class="sidebar-link">redis()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#config" title="config()" class="sidebar-link">config()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#bot" title="bot()" class="sidebar-link">bot()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#kv" title="kv()" class="sidebar-link">kv()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#zm-http-response" title="zmhttpresponse()" class="sidebar-link">zmhttpresponse()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#ws-socket" title="ws_socket()" class="sidebar-link">ws_socket()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#zm-create-app" title="zmcreateapp()" class="sidebar-link">zmcreateapp()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#zm-create-plugin" title="zmcreateplugin()" class="sidebar-link">zmcreateplugin()</a></li><li class="sidebar-sub-header"><a href="/components/common/global-defines.html#zm-websocket-client" title="zmwebsocketclient()" class="sidebar-link">zmwebsocketclient()</a></li></ul></li></ul></li><li><a href="/components/common/logging.html" title="日志" class="sidebar-link">日志</a></li><li><a href="/components/common/hot-update.html" title="框架调试 - 热更新和重载" class="sidebar-link">框架调试 - 热更新和重载</a></li></ul></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>存储组件</span> <span class="arrow right"><i aria-label="icon: down" class="anticon anticon-down"><svg viewBox="64 64 896 896" focusable="false" data-icon="down" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"></path></svg></i></span></p> <!----></section></li><li><section class="sidebar-group collapsable depth-0"><p class="sidebar-heading"><span>依赖注入组件</span> <span class="arrow right"><i aria-label="icon: down" class="anticon anticon-down"><svg viewBox="64 64 896 896" focusable="false" data-icon="down" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"></path></svg></i></span></p> <!----></section></li></ul> </aside> <main class="page has-page-anchor"> <div class="theme-antdocs-content content__default"><h1 id="全局方法和常量"><a href="#全局方法和常量" class="header-anchor">#</a> 全局方法和常量</h1> <h2 id="全局常量"><a href="#全局常量" class="header-anchor">#</a> 全局常量</h2> <h3 id="框架基本全局常量"><a href="#框架基本全局常量" class="header-anchor">#</a> 框架基本全局常量</h3> <table><thead><tr><th>常量名</th> <th>含义</th> <th></th></tr></thead> <tbody><tr><td><code>ZM_VERSION_ID</code> <br></td> <td>炸毛框架的版本 ID类似 <code>PHP_VERSION_ID</code></td> <td>随版本变化,例如 <code>30100</code></td></tr> <tr><td><code>ZM_VERSION</code></td> <td>炸毛框架的版本</td> <td>随版本变化,例如 <code>3.0.1</code></td></tr> <tr><td><code>LOAD_MODE</code></td> <td>框架的启动加载模式</td> <td>由框架的安装方式而定,值可能为 <code>LOAD_MODE_VENDOR</code><code>LOAD_MODE_SRC</code></td></tr> <tr><td><code>LOAD_MODE_VENDOR</code></td> <td><code>vendor</code> 目录加载框架,用于开发者开发插件时使用</td> <td><code>0</code></td></tr> <tr><td><code>LOAD_MODE_SRC</code></td> <td><code>src/ZM</code> 目录加载框架,用于开发者开发框架时使用</td> <td><code>1</code></td></tr> <tr><td><code>WORKING_DIR</code></td> <td>框架的工作目录</td> <td>根据用户启动框架时命令行的当前目录变化</td></tr> <tr><td><code>SOURCE_ROOT_DIR</code></td> <td>框架的运行根目录</td> <td>如果是 Phar 启动,则为 Phar 根目录,否则根据用户启动框架时命令行的当前目录变化</td></tr> <tr><td><code>FRAMEWORK_ROOT_DIR</code></td> <td>框架自身的源代码主目<br></td> <td>如果是 vendor 目录加载框架,则为 <code>vendor/zhamao/framework/</code>,否则等于 <code>SOURCE_ROOT_DIR</code></td></tr> <tr><td><code>TMP_DIR</code></td> <td>框架可使用的临时文件夹</td> <td>Windows 下为 <code>C:\Windows\Temp</code>,定义了 <code>TMPDIR</code> 系统环境变量则使用其值,否则可能是 <code>/tmp</code> 或工作目录的 <code>./.zm-tmp</code></td></tr> <tr><td><code>ZM_INIT_TIME</code></td> <td>引入框架启动的最早时间戳(毫秒级)</td> <td><code>microtime(true)</code> 的值</td></tr> <tr><td><code>ZM_STATE_DIR</code></td> <td>存放框架各进程和连接状态的目录</td> <td><code>TMP_DIR</code> 下的 <code>sha1(ZM_INIT_TIME . FRAMEWORK_ROOT_DIR)</code> 子目录</td></tr> <tr><td><code>APP_VERSION</code></td> <td>使用框架开发的项目的版本</td> <td>需开发者自行定义,如果在启动框架前未指定,则自动使用框架版本</td></tr></tbody></table> <h3 id="多进程全局常量"><a href="#多进程全局常量" class="header-anchor">#</a> 多进程全局常量</h3> <table><thead><tr><th>常量名</th> <th>含义</th></tr></thead> <tbody><tr><td><code>ZM_PROCESS_MASTER</code></td> <td>Master 进程</td></tr> <tr><td><code>ZM_PROCESS_MANAGER</code></td> <td>Manager 进程</td></tr> <tr><td><code>ZM_PROCESS_WORKER</code></td> <td>Worker 进程</td></tr> <tr><td><code>ZM_PROCESS_USER</code></td> <td>User 进程</td></tr> <tr><td><code>ZM_PROCESS_TASKWORKER</code></td> <td>TaskWorker 进程</td></tr></tbody></table> <h3 id="错误全局常量"><a href="#错误全局常量" class="header-anchor">#</a> 错误全局常量</h3> <table><thead><tr><th>常量名</th> <th>含义</th></tr></thead> <tbody><tr><td><code>ZM_ERR_NONE</code></td> <td>无错误</td></tr> <tr><td><code>ZM_ERR_METHOD_NOT_FOUND</code></td> <td>找不到方法</td></tr> <tr><td><code>ZM_ERR_ROUTE_NOT_FOUND</code></td> <td>找不到路由</td></tr> <tr><td><code>ZM_ERR_ROUTE_METHOD_NOT_ALLOWED</code></td> <td>路由方法不允许</td></tr></tbody></table> <h3 id="机器人回复模式常量"><a href="#机器人回复模式常量" class="header-anchor">#</a> 机器人回复模式常量</h3> <blockquote><p>该类常量可以使用位运算叠加效果,例如既 at 又引用:<code>ZM_REPLY_MENTION | ZM_REPLY_QUOTE</code></p></blockquote> <table><thead><tr><th>常量名</th> <th>含义</th></tr></thead> <tbody><tr><td><code>ZM_REPLY_NONE</code></td> <td>默认回复,不带任何东西</td></tr> <tr><td><code>ZM_REPLY_MENTION</code></td> <td>回复时 at 该用户</td></tr> <tr><td><code>ZM_REPLY_QUOTE</code></td> <td>回复时引用该消息</td></tr></tbody></table> <h3 id="机器人询问模式常量"><a href="#机器人询问模式常量" class="header-anchor">#</a> 机器人询问模式常量</h3> <blockquote><p>该类常量可以使用位运算叠加效果,例如询问时引用,超时时 at<code>ZM_PROMPT_QUOTE_USER | ZM_RPOMPT_TIMEOUT_MENTION_USER</code></p></blockquote> <table><thead><tr><th>常量名</th> <th>含义</th></tr></thead> <tbody><tr><td><code>ZM_PROMPT_NONE</code></td> <td>使用 <code>prompt()</code> 时不附加任何内容</td></tr> <tr><td><code>ZM_PROMPT_MENTION_USER</code></td> <td>询问时 at 该用户</td></tr> <tr><td><code>ZM_PROMPT_QUOTE_USER</code></td> <td>询问时引用该用户的消息</td></tr> <tr><td><code>ZM_PROMPT_TIMEOUT_MENTION_USER</code></td> <td>询问超时,回复超时语句时 at 该用户</td></tr> <tr><td><code>ZM_PROMPT_TIMEOUT_QUOTE_SELF</code></td> <td>询问超时,发送超时语句时引用自己的询问语句(如果存在)</td></tr> <tr><td><code>ZM_PROMPT_TIMEOUT_QUOTE_USER</code></td> <td>询问超时,发送超时语句时引用用户自己的消息(与 <code>ZM_PROMPT_TIMEOUT_QUOTE_SELF</code> 互斥)</td></tr></tbody></table> <h2 id="全局方法"><a href="#全局方法" class="header-anchor">#</a> 全局方法</h2> <p>全局方法一般是一些工具类函数,例如快速输出 log、打印变量、获取上下文对象等。</p> <div class="custom-block warning"><p class="custom-block-title">注意</p> <p>框架的全局方法均需要在合适的地方使用,在非法的位置会出现问题、抛出异常或返回 null。例如</p> <ul><li>在框架启动前调用 <code>logger()</code> 可能会无法应用 Logger 等级。</li> <li>在非机器人相关的事件内(如 Route 路由事件)获取机器人上下文默认返回一个空对象,需要进一步调用 <code>bot()-&gt;getBot()</code> 方法获取具体的机器人上下文。</li></ul></div> <h3 id="zm-dir"><a href="#zm-dir" class="header-anchor">#</a> zm_dir()</h3> <p>根据具体操作系统替换路径的分隔符。</p> <div class="language-php line-numbers-mode"><pre class="language-php"><code><span class="token comment">// Windows 系统</span>
<span class="token variable">$real_path</span> <span class="token operator">=</span> <span class="token function">zm_dir</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'C:/Windows/win.ini'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 返回 &quot;C:\\Windows\\win.ini&quot;</span>
<span class="token comment">// Phar 环境下,双系统都是正斜杠</span>
<span class="token variable">$real_path</span> <span class="token operator">=</span> <span class="token function">zm_dir</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'phar://C:/a.php'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 返回相同的内容</span>
<span class="token comment">// Linux 环境</span>
<span class="token variable">$real_path</span> <span class="token operator">=</span> <span class="token function">zm_dir</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'asd/bbb'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 返回相同的内容</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br></div></div><h3 id="zm-exec"><a href="#zm-exec" class="header-anchor">#</a> zm_exec()</h3> <p>执行 shell 命令,如果在协程环境下,将自动运用协程挂起。</p> <ul><li>定义:<code>zm_exec(string $cmd)</code></li> <li>返回:<code>OneBot\Driver\Process\ExecutionResult</code></li></ul> <div class="language-php line-numbers-mode"><pre class="language-php"><code><span class="token variable">$result</span> <span class="token operator">=</span> <span class="token function">zm_exec</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'uname -s'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">echo</span> <span class="token variable">$result</span><span class="token operator">-&gt;</span><span class="token property">stdout</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token comment">// 返回 输出内容</span>
<span class="token keyword">echo</span> <span class="token variable">$result</span><span class="token operator">-&gt;</span><span class="token property">stderr</span> <span class="token operator">.</span> <span class="token constant">PHP_EOL</span><span class="token punctuation">;</span> <span class="token comment">// 返回 STDERR 内容</span>
<span class="token keyword">echo</span> <span class="token variable">$result</span><span class="token operator">-&gt;</span><span class="token property">code</span> <span class="token operator">===</span> <span class="token number">0</span> <span class="token operator">?</span> <span class="token string single-quoted-string">'正常退出'</span> <span class="token punctuation">:</span> <span class="token string single-quoted-string">'异常退出'</span><span class="token punctuation">;</span> <span class="token comment">// 返回的状态码</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br></div></div><h3 id="zm-sleep"><a href="#zm-sleep" class="header-anchor">#</a> zm_sleep()</h3> <p>sleep 指定事件,单位为秒(最小单位为 1 毫秒,即 0.001)。在协程环境下不会阻塞进程地睡眠。</p> <ul><li>定义:<code>zm_sleep(float|int $time)</code></li></ul> <div class="language-php line-numbers-mode"><pre class="language-php"><code><span class="token function">zm_sleep</span><span class="token punctuation">(</span><span class="token number">2.5</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h3 id="coroutine"><a href="#coroutine" class="header-anchor">#</a> coroutine()</h3> <p>获取协程接口,调用协程相关的 API。如果协程环境不支持或未就绪返回 null。</p> <ul><li>返回:<code>OneBot\Driver\Coroutine\CoroutineInterface|null</code></li></ul> <h3 id="zm-instance-id"><a href="#zm-instance-id" class="header-anchor">#</a> zm_instance_id()</h3> <p>返回当前炸毛框架运行实例的 ID。</p> <p>当前实例的 ID 计算方法为:当前时间戳(毫秒级)的 CRC32 的十六进制值。</p> <div class="language-php line-numbers-mode"><pre class="language-php"><code><span class="token keyword">echo</span> <span class="token function">zm_instance_id</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 返回当前实例的 ID例如 bd22f36f</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h3 id="logger"><a href="#logger" class="header-anchor">#</a> logger()</h3> <p>助手方法,返回一个框架绑定的 Logger 实例,符合 PSR-Logger 标准。</p> <ul><li>返回:<code>Psr\Log\LoggerInterface</code></li></ul> <div class="language-php line-numbers-mode"><pre class="language-php"><code><span class="token function">logger</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">info</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'你好'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">logger</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">warning</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'警告'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">logger</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'错误'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br></div></div><h3 id="is-assoc-array"><a href="#is-assoc-array" class="header-anchor">#</a> is_assoc_array()</h3> <p>判断传入的数组是否为键值对数组。</p> <ul><li>定义:<code>is_assoc_array(array $array)</code></li> <li>返回:<code>bool</code></li></ul> <div class="language-php line-numbers-mode"><pre class="language-php"><code><span class="token function">var_dump</span><span class="token punctuation">(</span><span class="token function">is_assoc_array</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 返回 false</span>
<span class="token function">var_dump</span><span class="token punctuation">(</span><span class="token function">is_assoc_array</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'a'</span> <span class="token operator">=&gt;</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'b'</span> <span class="token operator">=&gt;</span> <span class="token number">2</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 返回 true</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><h3 id="match-pattern"><a href="#match-pattern" class="header-anchor">#</a> match_pattern()</h3> <p>星号通配符匹配字符串。星号以外的部分必须完全匹配才会匹配成功。</p> <ul><li>定义:<code>match_pattern(string $pattern, string $subject)</code></li> <li>返回:<code>bool</code></li></ul> <p>参数说明:</p> <ul><li><code>$pattern</code> 为匹配的表达式,例如 <code>我叫*,今年*岁了。</code></li> <li><code>$subject</code> 为内容,例如 <code>我叫小明今年19岁了。</code></li></ul> <div class="language-php line-numbers-mode"><pre class="language-php"><code><span class="token function">var_dump</span><span class="token punctuation">(</span><span class="token function">match_pattern</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'我叫*,今年*岁了。'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'我叫小明今年19岁了。'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 返回 true</span>
<span class="token function">var_dump</span><span class="token punctuation">(</span><span class="token function">match_pattern</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'我叫*,今年*岁了。'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'我叫小明今年19岁了'</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 返回 false</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><h3 id="segment"><a href="#segment" class="header-anchor">#</a> segment()</h3> <p>构建消息段的助手函数。</p> <ul><li>定义:<code>segment(string $type, array $data = [])</code></li> <li>返回:<code>MessageSegment</code></li></ul> <p>参数同 <code>MessageSegment</code> 对象,这里不做多余的说明。</p> <div class="language-php line-numbers-mode"><pre class="language-php"><code><span class="token variable">$segment</span> <span class="token operator">=</span> <span class="token function">segment</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'text'</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string single-quoted-string">'text'</span> <span class="token operator">=&gt;</span> <span class="token string single-quoted-string">'hello'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">bot</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">reply</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token variable">$segment</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 发送一条 hello 的消息</span>
<span class="token variable">$seg2</span> <span class="token operator">=</span> <span class="token function">segment</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'mention'</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string single-quoted-string">'user_id'</span> <span class="token operator">=&gt;</span> <span class="token string single-quoted-string">'123456'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">bot</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">reply</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token variable">$seg2</span><span class="token punctuation">,</span> <span class="token variable">$segment</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 发送带 at</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br></div></div><h3 id="middleware"><a href="#middleware" class="header-anchor">#</a> middleware()</h3> <p>中间件操作类的助手函数。</p> <p>返回:<code>ZM\Middleware\MiddlewareHandler</code></p> <div class="language-php line-numbers-mode"><pre class="language-php"><code><span class="token function">middleware</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">process</span><span class="token punctuation">(</span><span class="token keyword">function</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h3 id="container"><a href="#container" class="header-anchor">#</a> container()</h3> <p>获取容器实例。</p> <p>返回:<code>DI\Container</code></p> <div class="language-php line-numbers-mode"><pre class="language-php"><code><span class="token function">container</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'xxx'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br></div></div><h3 id="resolve"><a href="#resolve" class="header-anchor">#</a> resolve()</h3> <p>解析类实例(使用容器),相当于 <code>container()-&gt;make()</code> 的别名。</p> <ul><li>定义:<code>resolve(string $abstract, array $parameters = [])</code></li> <li>返回:<code>Closure|T</code>(返回类的实例对象或闭包)</li></ul> <h3 id="db"><a href="#db" class="header-anchor">#</a> db()</h3> <p>获取 Database 数据库连接操作类。</p> <ul><li>定义:<code>db(string $name = '')</code></li> <li>返回:<code>ZM\Store\Database\DBWrapper</code></li></ul> <p>这里返回的是炸毛 SQL 类数据库操作的 wrapper 类name 为全局配置中对应的名称。</p> <p>我们假设连接了一个 MySQL 数据库,假设数据库配置如下:</p> <div class="language-php line-numbers-mode"><pre class="language-php"><code><span class="token variable">$config</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'database'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">[</span>
<span class="token string single-quoted-string">'mydb'</span> <span class="token operator">=&gt;</span> <span class="token punctuation">[</span>
<span class="token string single-quoted-string">'enable'</span> <span class="token operator">=&gt;</span> <span class="token constant boolean">true</span><span class="token punctuation">,</span>
<span class="token string single-quoted-string">'type'</span> <span class="token operator">=&gt;</span> <span class="token string single-quoted-string">'mysql'</span><span class="token punctuation">,</span>
<span class="token string single-quoted-string">'host'</span> <span class="token operator">=&gt;</span> <span class="token string single-quoted-string">'127.0.0.1'</span><span class="token punctuation">,</span>
<span class="token string single-quoted-string">'port'</span> <span class="token operator">=&gt;</span> <span class="token number">3306</span><span class="token punctuation">,</span>
<span class="token string single-quoted-string">'username'</span> <span class="token operator">=&gt;</span> <span class="token string single-quoted-string">'root'</span><span class="token punctuation">,</span>
<span class="token string single-quoted-string">'password'</span> <span class="token operator">=&gt;</span> <span class="token string single-quoted-string">'ZhamaoTEST'</span><span class="token punctuation">,</span>
<span class="token string single-quoted-string">'dbname'</span> <span class="token operator">=&gt;</span> <span class="token string single-quoted-string">'zm'</span><span class="token punctuation">,</span>
<span class="token string single-quoted-string">'charset'</span> <span class="token operator">=&gt;</span> <span class="token string single-quoted-string">'utf8mb4'</span><span class="token punctuation">,</span>
<span class="token string single-quoted-string">'pool_size'</span> <span class="token operator">=&gt;</span> <span class="token number">64</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span>
<span class="token punctuation">]</span><span class="token punctuation">;</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br><span class="line-number">13</span><br></div></div><p>在插件中使用:</p> <div class="language-php line-numbers-mode"><pre class="language-php"><code><span class="token variable">$result</span> <span class="token operator">=</span> <span class="token function">db</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'mydb'</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">fetchAllAssociative</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'SELECT * FROM users WHERE username = ?'</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string single-quoted-string">'jerry'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">var_dump</span><span class="token punctuation">(</span><span class="token variable">$result</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 假设数据库表只有 id 和 username 两列,这里返回了 ['id' =&gt; 1, 'username' =&gt; 'jerry']</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><p>有关此处数据库更详细的内容,请看 <a href="/components/store/mysql.html">SQL 数据库组件</a></p> <h3 id="zm-sqlite"><a href="#zm-sqlite" class="header-anchor">#</a> zm_sqlite()</h3> <blockquote><p>仅限于炸毛框架 3.2.0 及以上版本使用。</p></blockquote> <p>获取一个便捷 SQLite 模式的数据库操作对象。</p> <p>有关此处数据库更详细的内容,请看 <a href="/components/store/mysql.html">SQL 数据库组件</a></p> <h3 id="sql-builder"><a href="#sql-builder" class="header-anchor">#</a> sql_builder()</h3> <p>使用 SQL 语句构建器构建一个查询。</p> <ul><li>定义:<code>sql_builder(string $name = '')</code></li> <li>返回:<code>ZM\Store\Database\DBQueryBuilder</code></li></ul> <p>这里返回的是炸毛 SQL 类数据库操作的查询构建器类name 为全局配置中对应的名称。</p> <p>我们再次假设数据库配置同上方 <code>db()</code> 中提到的配置相同,使用 <code>sql_builder()</code></p> <div class="language-php line-numbers-mode"><pre class="language-php"><code><span class="token variable">$result</span> <span class="token operator">=</span> <span class="token function">sql_builder</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'mydb'</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">select</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'*'</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">from</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'users'</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">where</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'username = :username'</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">setParameter</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'username'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'jerry'</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">execute</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">fetchAllAssociative</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 结果与上方相同</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><p>有关此处数据库更详细的内容,请看 <a href="/components/store/mysql.html">SQL 数据库组件</a></p> <h3 id="zm-sqlite-builder"><a href="#zm-sqlite-builder" class="header-anchor">#</a> zm_sqlite_builder()</h3> <blockquote><p>仅限于炸毛框架 3.2.0 及以上版本使用。</p></blockquote> <p>获取一个便捷 SQLite 模式的数据库 SQL 语句构造器。</p> <p>有关此处数据库更详细的内容,请看 <a href="/components/store/mysql.html">SQL 数据库组件</a></p> <h3 id="redis"><a href="#redis" class="header-anchor">#</a> redis()</h3> <p>获取 Redis 操作类。有关 Redis 的更多详情和配置,见 <a href="/components/store/redis">Redis 数据库组件</a></p> <ul><li>定义:<code>redis(string $name = 'default')</code></li> <li>返回:<code>ZM\Store\KV\Redis\RedisWrapper</code></li></ul> <p>返回的 RedisWrapper 对象为 phpredis 扩展的 <code>\Redis</code> 对象的 wrapper 类,此类的方法等同于 <code>\Redis</code> 类。有关 phpredis 类的方法文档,
<a href="https://phpredis.github.io/phpredis/" target="_blank" rel="noopener noreferrer">Redis - 官方文档<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a><a href="https://www.cnblogs.com/ikodota/archive/2012/03/05/php_redis_cn.html" target="_blank" rel="noopener noreferrer">中文文档(非官方)<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></p> <div class="language-php line-numbers-mode"><pre class="language-php"><code><span class="token function">redis</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'myredis'</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">set</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'hello'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'world'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token variable">$value</span> <span class="token operator">=</span> <span class="token function">redis</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'myredis'</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'hello'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 返回 world</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><p>其中,名称默认为 <code>default</code>,即如果你的配置文件中设置的 Redis 连接名称存在 <code>default</code>,将默认返回该连接的实例。</p> <div class="language-php line-numbers-mode"><pre class="language-php"><code><span class="token comment">/* Redis 连接配置,框架将自动生成连接池,支持多个连接池 */</span>
<span class="token variable">$config</span><span class="token punctuation">[</span><span class="token string single-quoted-string">'redis'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token punctuation">[</span>
<span class="token string single-quoted-string">'default'</span> <span class="token operator">=&gt;</span> <span class="token punctuation">[</span>
<span class="token string single-quoted-string">'enable'</span> <span class="token operator">=&gt;</span> <span class="token constant boolean">true</span><span class="token punctuation">,</span>
<span class="token string single-quoted-string">'host'</span> <span class="token operator">=&gt;</span> <span class="token string single-quoted-string">'127.0.0.1'</span><span class="token punctuation">,</span>
<span class="token string single-quoted-string">'port'</span> <span class="token operator">=&gt;</span> <span class="token number">6379</span><span class="token punctuation">,</span>
<span class="token string single-quoted-string">'index'</span> <span class="token operator">=&gt;</span> <span class="token number">0</span><span class="token punctuation">,</span>
<span class="token string single-quoted-string">'auth'</span> <span class="token operator">=&gt;</span> <span class="token string single-quoted-string">''</span><span class="token punctuation">,</span>
<span class="token string single-quoted-string">'pool_size'</span> <span class="token operator">=&gt;</span> <span class="token number">10</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">,</span>
<span class="token punctuation">]</span><span class="token punctuation">;</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br></div></div><div class="language-php line-numbers-mode"><pre class="language-php"><code><span class="token comment">// 不加 name 默认使用 default 连接</span>
<span class="token function">redis</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">del</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'hello'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><h3 id="config"><a href="#config" class="header-anchor">#</a> config()</h3> <p>获取或设置配置项。</p> <ul><li>定义:<code>config(array|string $key = null, mixed $default = null)</code></li> <li>返回:<code>mixed|ZM\Config\ZMConfig|void</code></li></ul> <p><code>$key</code> 传入 <code>string</code> 时,表明从配置中获取参数。有关如何获取配置项,见 <a href="">组件 - 配置文件TODO</a></p> <p><code>$key</code> 传入的是数组,则表明是修改配置内容,例如:<code>config(['global.driver' =&gt; 'swoole'])</code> 表明修改 <code>global</code> 配置下的 <code>driver</code> 项为 <code>swoole</code></p> <p><code>$key</code> 没有指定或传入 null则返回 ZMConfig 实例对象。</p> <p><code>$key</code> 传入 <code>string</code> 来获取配置项时,如果配置项不存在,则返回 <code>$default</code> 值。</p> <div class="language-php line-numbers-mode"><pre class="language-php"><code><span class="token variable">$result</span> <span class="token operator">=</span> <span class="token function">config</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'global.driver'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 假设返回 swoole</span>
<span class="token variable">$result</span> <span class="token operator">=</span> <span class="token function">config</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'global.dohewiufew'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 不存在配置项,返回 null</span>
<span class="token variable">$result</span> <span class="token operator">=</span> <span class="token function">config</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'global.fonnwe'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'niu'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 不存在配置项,设置了默认值,则返回默认值,这里会返回 'niu'</span>
<span class="token function">config</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">set</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'global.driver'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'swoole'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 修改配置</span>
<span class="token variable">$result</span> <span class="token operator">=</span> <span class="token function">config</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">get</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'global.driver'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'swoole'</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 获取配置,和直接传入 string 相同效果</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br></div></div><h3 id="bot"><a href="#bot" class="header-anchor">#</a> bot()</h3> <p>获取当前事件的机器人上下文操作对象。</p> <p>返回:<code>ZM\Context\BotContext</code></p> <p>此方法和依赖注入不同的是,无论所在事件是否为机器人事件,均会返回上下文对象,不会报错,但返回的对象不能做任何机器人操作,需要开发者调用方法 <code>getBot()</code> 获取指定的机器人上下文。</p> <p>这里我们假设两个场景,第一个是使用机器人的 BotCommand 完成一个机器人的命令回复:</p> <div class="language-php line-numbers-mode"><pre class="language-php"><code><span class="token attribute"><span class="token delimiter punctuation">#[</span><span class="token attribute-content">\<span class="token attribute-class-name class-name">BotCommand</span><span class="token punctuation">(</span><span class="token attribute-class-name class-name">match</span><span class="token punctuation">:</span> <span class="token string single-quoted-string">'测试上下文'</span><span class="token punctuation">)</span></span><span class="token delimiter punctuation">]</span></span>
<span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">testCtx</span><span class="token punctuation">(</span><span class="token class-name class-name-fully-qualified type-declaration"><span class="token punctuation">\</span>BotContext</span> <span class="token variable">$ctx</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
<span class="token variable">$ctx</span><span class="token operator">-&gt;</span><span class="token function">reply</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'你好啊'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br></div></div><p>上方的例子是第一章指南中给我们的例子,使用了依赖注入功能,获取到了上下文对象。如果你不喜欢依赖注入,就可以使用 <code>bot()</code> 全局方法代替:</p> <div class="language-php line-numbers-mode"><pre class="language-php"><code><span class="token attribute"><span class="token delimiter punctuation">#[</span><span class="token attribute-content">\<span class="token attribute-class-name class-name">BotCommand</span><span class="token punctuation">(</span><span class="token attribute-class-name class-name">match</span><span class="token punctuation">:</span> <span class="token string single-quoted-string">'测试上下文'</span><span class="token punctuation">)</span></span><span class="token delimiter punctuation">]</span></span>
<span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">testCtx</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
<span class="token function">bot</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">reply</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'你好啊'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br></div></div><p>第二个场景,某个人访问了框架的某个 Route 路由,我们想调用机器人发送一条消息。这时候依赖注入使用 <code>BotContext</code> 会抛出异常,无法使用。
使用 <code>bot()</code> 则不会。</p> <p>下面这个例子就是在访问一个路由的时候调用机器人给一个用户发送一条私聊消息。我们假设机器人的平台是 qq机器人的 QQ 号为 123456。</p> <blockquote><p>你首先需要保证机器人实现端已经通过反向 WebSocket 方式连接到框架并且可以正常收发消息。</p></blockquote> <div class="language-php line-numbers-mode"><pre class="language-php"><code><span class="token attribute"><span class="token delimiter punctuation">#[</span><span class="token attribute-content">\<span class="token attribute-class-name class-name">Route</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'/test'</span><span class="token punctuation">)</span></span><span class="token delimiter punctuation">]</span></span>
<span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function-definition function">testRoute</span><span class="token punctuation">(</span><span class="token class-name type-declaration">HttpRequestEvent</span> <span class="token variable">$event</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token variable">$event</span><span class="token operator">-&gt;</span><span class="token function">getRequest</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">getMethod</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">===</span> <span class="token string single-quoted-string">'POST'</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token variable">$contents</span> <span class="token operator">=</span> <span class="token variable">$event</span><span class="token operator">-&gt;</span><span class="token function">getRequest</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">getBody</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">getContents</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 将收到的 POST 请求用机器人私发给某人</span>
<span class="token function">bot</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">getBot</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'123456'</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'qq'</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">sendMessage</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'收到了一个 POST 请求:'</span> <span class="token operator">.</span> <span class="token variable">$contents</span><span class="token punctuation">,</span> <span class="token string single-quoted-string">'private'</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string single-quoted-string">'user_id'</span> <span class="token operator">=&gt;</span> <span class="token string single-quoted-string">'67867867'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span>
<span class="token comment">// 这个路由其他 method 都不允许,只能 POST其他请求过来就返回 405 Not Allowed</span>
<span class="token variable">$event</span><span class="token operator">-&gt;</span><span class="token function">withResponse</span><span class="token punctuation">(</span><span class="token class-name class-name-fully-qualified static-context"><span class="token punctuation">\</span>Choir<span class="token punctuation">\</span>Http<span class="token punctuation">\</span>HttpFactory</span><span class="token operator">::</span><span class="token function">createResponse</span><span class="token punctuation">(</span><span class="token number">405</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br><span class="line-number">3</span><br><span class="line-number">4</span><br><span class="line-number">5</span><br><span class="line-number">6</span><br><span class="line-number">7</span><br><span class="line-number">8</span><br><span class="line-number">9</span><br><span class="line-number">10</span><br><span class="line-number">11</span><br><span class="line-number">12</span><br></div></div><h3 id="kv"><a href="#kv" class="header-anchor">#</a> kv()</h3> <p>获取一个 KV 库实例。</p> <p>有关 KV 库的使用,见 <a href="/components/store/cache">组件 - KV 缓存</a></p> <h3 id="zm-http-response"><a href="#zm-http-response" class="header-anchor">#</a> zm_http_response()</h3> <p>快速生成一个符合 PSR-7 的 HTTP Response 对象。</p> <p>有关参数,等同于 HttpFactory 对象,详见 HttpFactory 文档TODO</p> <h3 id="ws-socket"><a href="#ws-socket" class="header-anchor">#</a> ws_socket()</h3> <p>获取驱动的 WebSocket 操作对象。</p> <p>定义:<code>function ws_socket(int $flag = 1): WSServerResponse</code></p> <p>传入一个 flag 值(值为你在 <code>global.php</code> 中为 server 设置的 flag 值),返回对应端口的 WebSocket 操作对象。</p> <p>操作对象可以主动发送消息到指定客户端、可以获取指定端口的配置信息等。</p> <div class="language-php line-numbers-mode"><pre class="language-php"><code><span class="token variable">$socket</span> <span class="token operator">=</span> <span class="token function">ws_socket</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token variable">$socket</span><span class="token operator">-&gt;</span><span class="token function">send</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'hello world'</span><span class="token punctuation">,</span> <span class="token variable">$event</span><span class="token operator">-&gt;</span><span class="token function">getFd</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 客户端的连接 fd 编号可以通过 WebSocketOpenEvent 等事件获取</span>
</code></pre> <div class="line-numbers-wrapper"><span class="line-number">1</span><br><span class="line-number">2</span><br></div></div><h3 id="zm-create-app"><a href="#zm-create-app" class="header-anchor">#</a> zm_create_app()</h3> <p>创建一个炸毛框架的单文件应用(仅单文件,项目外非编写插件模式时可用),效果等同于 <code>new \ZM\ZMApplication()</code></p> <h3 id="zm-create-plugin"><a href="#zm-create-plugin" class="header-anchor">#</a> zm_create_plugin()</h3> <p>创建一个炸毛单文件模式的插件对象,效果等同于 <code>new \ZM\Plugin\ZMPlugin()</code></p> <h3 id="zm-websocket-client"><a href="#zm-websocket-client" class="header-anchor">#</a> zm_websocket_client()</h3> <p>创建一个 WebSocket 客户端。详情见 <a href="/components/http/websocket-client">框架内置 WebSocket 客户端</a></p></div> <footer class="page-edit"><div class="edit-link"><a href="https://github.com/zhamao-robot/zhamao-framework/edit/main/docs/components/common/global-defines.md" target="_blank" rel="noopener noreferrer">Edit this page</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div> <!----></footer> <div class="page-nav"><p class="inner"><span class="prev"><a href="/components/common/class-alias.html" class="prev"><i aria-label="icon: left" class="anticon anticon-left"><svg viewBox="64 64 896 896" focusable="false" data-icon="left" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M724 218.3V141c0-6.7-7.7-10.4-12.9-6.3L260.3 486.8a31.86 31.86 0 0 0 0 50.3l450.8 352.1c5.3 4.1 12.9.4 12.9-6.3v-77.3c0-4.9-2.3-9.6-6.1-12.6l-360-281 360-281.1c3.8-3 6.1-7.7 6.1-12.6z"></path></svg></i>
类全局别名
</a></span> <span class="next"><a href="/components/common/logging.html">
日志
<i aria-label="icon: right" class="anticon anticon-right"><svg viewBox="64 64 896 896" focusable="false" data-icon="right" width="1em" height="1em" fill="currentColor" aria-hidden="true"><path d="M765.7 486.8L314.9 134.7A7.97 7.97 0 0 0 302 141v77.3c0 4.9 2.3 9.6 6.1 12.6l360 281.1-360 281.1c-3.9 3-6.1 7.7-6.1 12.6V883c0 6.7 7.7 10.4 12.9 6.3l450.8-352.1a31.96 31.96 0 0 0 0-50.4z"></path></svg></i></a></span></p></div> <div class="page-anchor"><div class="ant-space ant-space-vertical" style="width:100%;"><div class="ant-space-item"><div class="page-anchor-offset"><div><div class="ant-anchor-wrapper" style="max-height:100vh;"><div class="ant-anchor"><div class="ant-anchor-ink"><span class="ant-anchor-ink-ball"></span></div><div class="ant-anchor-link"><a href="#全局常量" title="全局常量" class="ant-anchor-link-title">全局常量</a><div class="ant-anchor-link"><a href="#框架基本全局常量" title="框架基本全局常量" class="ant-anchor-link-title">框架基本全局常量</a></div><div class="ant-anchor-link"><a href="#多进程全局常量" title="多进程全局常量" class="ant-anchor-link-title">多进程全局常量</a></div><div class="ant-anchor-link"><a href="#错误全局常量" title="错误全局常量" class="ant-anchor-link-title">错误全局常量</a></div><div class="ant-anchor-link"><a href="#机器人回复模式常量" title="机器人回复模式常量" class="ant-anchor-link-title">机器人回复模式常量</a></div><div class="ant-anchor-link"><a href="#机器人询问模式常量" title="机器人询问模式常量" class="ant-anchor-link-title">机器人询问模式常量</a></div></div><div class="ant-anchor-link"><a href="#全局方法" title="全局方法" class="ant-anchor-link-title">全局方法</a><div class="ant-anchor-link"><a href="#zm-dir" title="zm_dir()" class="ant-anchor-link-title">zm_dir()</a></div><div class="ant-anchor-link"><a href="#zm-exec" title="zm_exec()" class="ant-anchor-link-title">zm_exec()</a></div><div class="ant-anchor-link"><a href="#zm-sleep" title="zm_sleep()" class="ant-anchor-link-title">zm_sleep()</a></div><div class="ant-anchor-link"><a href="#coroutine" title="coroutine()" class="ant-anchor-link-title">coroutine()</a></div><div class="ant-anchor-link"><a href="#zm-instance-id" title="zminstanceid()" class="ant-anchor-link-title">zminstanceid()</a></div><div class="ant-anchor-link"><a href="#logger" title="logger()" class="ant-anchor-link-title">logger()</a></div><div class="ant-anchor-link"><a href="#is-assoc-array" title="isassocarray()" class="ant-anchor-link-title">isassocarray()</a></div><div class="ant-anchor-link"><a href="#match-pattern" title="match_pattern()" class="ant-anchor-link-title">match_pattern()</a></div><div class="ant-anchor-link"><a href="#segment" title="segment()" class="ant-anchor-link-title">segment()</a></div><div class="ant-anchor-link"><a href="#middleware" title="middleware()" class="ant-anchor-link-title">middleware()</a></div><div class="ant-anchor-link"><a href="#container" title="container()" class="ant-anchor-link-title">container()</a></div><div class="ant-anchor-link"><a href="#resolve" title="resolve()" class="ant-anchor-link-title">resolve()</a></div><div class="ant-anchor-link"><a href="#db" title="db()" class="ant-anchor-link-title">db()</a></div><div class="ant-anchor-link"><a href="#zm-sqlite" title="zm_sqlite()" class="ant-anchor-link-title">zm_sqlite()</a></div><div class="ant-anchor-link"><a href="#sql-builder" title="sql_builder()" class="ant-anchor-link-title">sql_builder()</a></div><div class="ant-anchor-link"><a href="#zm-sqlite-builder" title="zmsqlitebuilder()" class="ant-anchor-link-title">zmsqlitebuilder()</a></div><div class="ant-anchor-link"><a href="#redis" title="redis()" class="ant-anchor-link-title">redis()</a></div><div class="ant-anchor-link"><a href="#config" title="config()" class="ant-anchor-link-title">config()</a></div><div class="ant-anchor-link"><a href="#bot" title="bot()" class="ant-anchor-link-title">bot()</a></div><div class="ant-anchor-link"><a href="#kv" title="kv()" class="ant-anchor-link-title">kv()</a></div><div class="ant-anchor-link"><a href="#zm-http-response" title="zmhttpresponse()" class="ant-anchor-link-title">zmhttpresponse()</a></div><div class="ant-anchor-link"><a href="#ws-socket" title="ws_socket()" class="ant-anchor-link-title">ws_socket()</a></div><div class="ant-anchor-link"><a href="#zm-create-app" title="zmcreateapp()" class="ant-anchor-link-title">zmcreateapp()</a></div><div class="ant-anchor-link"><a href="#zm-create-plugin" title="zmcreateplugin()" class="ant-anchor-link-title">zmcreateplugin()</a></div><div class="ant-anchor-link"><a href="#zm-websocket-client" title="zmwebsocketclient()" class="ant-anchor-link-title">zmwebsocketclient()</a></div></div></div></div></div></div></div></div></div> </main> <!----></div><div class="global-ui"></div></div>
<script src="/assets/js/app.cf958133.js" defer></script><script src="/assets/js/2.4c04991c.js" defer></script><script src="/assets/js/1.d8755a39.js" defer></script><script src="/assets/js/32.7fc05474.js" defer></script>
</body>
</html>