插件开发原理
必须实现接口
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');
};