1
0
mirror of https://github.com/ZeroDream-CN/PHPMC7 synced 2024-11-22 11:42:53 +08:00
1 开发插件教程
Akkariin Meiko edited this page 2018-09-16 03:00:00 +08:00
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.

PHPMC 7 提供了插件接口,您可以在不修改程序的情况下增加自定义功能。

首先我们来了解插件的基础结构PHPMC 7 的所有插件均放在 plugins/ 目录下。

插件存放结构

Web
    |— plugins
               |— com.example.test.php
               |— com.example.text.json

com.example.test.php 插件的主体

com.example.test.json 插件的信息

快速开发一个简单的插件

注意:此插件仅用于测试,目的是为了让您更容易了解插件运行机制,可能会导致网站其他功能异常。

本教程定义的插件名为 Tester。

在 plugins 下新建一个文件 com.myplugin.tester.json编辑并输入以下内容

{
    "main":"Tester",
    "package":"com.myplugin.tester",
    "author":"Akkariin",
    "website":"https://www.akkariin.com/"
}

其中的 main 是插件的类名package 是包名用于防止插件重复author 是作者名website 是插件相关网站

然后我们开始编写插件,在 plugins 下新建另一个文件 com.myplugin.tester.php编辑并输入以下内容

<?php
class Tester {
    public static function onload() {
        global $Loader;
        $Loader->Event->registerClass("defaultActionEvent", new Tester()); // 注册 defaultActionEvent 事件
    }
    public function defaultActionEvent($test) {
        echo "你请求了以下参数:" . json_encode($test); // 输出 GET 参数数组
        return false; // 不取消事件
    }
}

简单介绍这个插件的作用:当你请求一个不存在的 action例如 /?action=2333)时,将会执行此插件的 defaultActionEvent() 方法。

onload() 是一个静态方法,会在插件被加载时自动调用一次

$Loader->Event->registerClass 负责注册插件事件,参数如下

  1. defaultActionEvent 就是未定义 Action 时执行的事件,类型为 String
  2. 插件的主类,也就是 Tester类型为 class

插件中的 defaultActionEvent() 会优先于系统内置的 defaultActionEvent() 事件执行,插件在执行完毕后必须返回一个 Boolean 值。

如果返回了 true那么此事件就会终止不会继续传递给系统执行如果返回了 false那么事件会继续交给系统执行。

其他 API 还在更新,敬请期待。