插件开发原理


必须实现接口

1、所有的插件类必须实现 PHPCreeper\Kernel\Slot\PluginInterface 接口。
2、所有的插件类必须定义一个静态的 install() 接口,目的是让引擎自动调用inject()接口。

爬山虎插件开发原理是基于PHPCreeper自带的inject()接口实现的。

接口inject()

1、该接口用来给PHPCreeper实例注册一个功能函数或类方法,类似于延迟动态绑定。
2、该接口有两个参数:第一个参数是类方法名称,第二个参数是一个匿名函数, 该匿名函数内$this总是指向当前PHPCreeper实例,如此我们就能很方便的操作PHPCreeper实例的方法。

注册插件

<?php
$phpcreeper->inject('get', function($url){
    //实际项目中为了便于维护,最好将匿名函数内的代码封装成插件类如:MyHttpClient
    return file_get_contents($url);
}); 

安装插件

使用installPlugin()方法来安装插件

<?php
PHPCreeper::installPlugin(\PHPCreeperApp\Plugin\MyHttpClient::class);

使用插件

<?php
$downloader->onDownloaderStart = function($downloader){
    $downloader->get('https://www.baidu.com');
};
Free Web Hosting