Skip to content

开发插件教程

Akkariin Meiko edited this page Sep 15, 2018 · 1 revision

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 还在更新,敬请期待。

Clone this wiki locally