插件开发原理
[!WARNING|style:callout|label:必须实现插件接口|iconVisibility:default|labelVisibility:default|className:block-warning] 1、所有的插件类必须实现 PHPCreeper\Kernel\Slot\PluginInterface 接口
2、所有的插件类必须定义一个静态的 install() 接口,目的是让引擎自动调用inject()接口
如果爬山虎内置的功能无法满足业务需求,完全可以通过开发插件来扩展或丰富应用功能,
爬山虎插件开发原理是基于PHPCreeper自带的inject()
接口实现的。
接口inject()
1、该接口用来给PHPCreeper实例注册一个功能函数或类方法,类似于延迟动态绑定。
2、该接口有两个参数:第一个参数是类方法名称,第二个参数是一个匿名函数,
有意思的是该匿名函数内$this
总是指向当前PHPCreeper实例,如此我们就能很方便的操作PHPCreeper实例的方法。
注册插件
$phpcreeper->inject('get', function($url){
//实际项目中为了便于维护,最好将匿名函数内的代码封装成插件类如:MyHttpClient
return file_get_contents($url);
});
安装插件
使用installPlugin()
方法来安装插件
PHPCreeper::installPlugin(\PHPCreeperApp\Plugin\MyHttpClient::class);
使用插件
$downloader->get('https://www.baidu.com');