PHP interface
介绍
管理类方法统一性、规范性,对一个功能的约束、描述。
根据控制反转设计原则,面向接口编程,而不是具体的实现,可以使代码更具可维护性,使代码松散耦合。
例子
interface PlayerInterface
{
const company = 'T';
public function open(); // 打开资源
public function play(); // 播放资源
public function stop(); // 暂停播放
public function close(); // 关闭资源
public function loadPlugin(); // 加载插件
}
interface PlayerPlugin extends PlayerInterface
{
public function init(); // 初始化
public function action(); // ..
}
class Service implements PlayerPlugin
{
// 打开资源
public function open() {
echo '打开资源';
}
// 播放资源
public function play() {
echo '播放资源';
}
// 暂停播放
public function stop() {
echo '暂停播放';
}
// 关闭资源
public function close() {
echo '关闭资源';
}
// 加载插件
public function loadPlugin(){
echo '加载插件';
}
// 初始化
public function init() {
echo '初始化';
}
// ..
public function action() {
echo '..';
}
// 循环播放
public function loop(){
echo '循环播放';
}
}
$Service = new Service();
$Service->close();
// 输出: 关闭资源
透过laravel框架中的使用进一步了解
Laravel框架有个Contracts目录,存放了各个模块的interface类,用来约束实现类至少要实现的方法。
比如vendor/laravel/framework/src/Illuminate/Contracts/Config/Repository.php 是config的接口,vendor/laravel/framework/src/Illuminate/Config/Repository.php是对config接口的实现。通过看接口,我们就可以知道肯定有哪些方法。
通过看全局方法helper文件(vendor/laravel/framework/src/Illuminate/Foundation/helpers.php),找到了config方法:
if (! function_exists('config')) {
/**
* Get / set the specified configuration value.
*
* If an array is passed as the key, we will assume you want to set an array of values.
*
* @param array|string $key
* @param mixed $default
* @return mixed
*/
function config($key = null, $default = null)
{
if (is_null($key)) {
return app('config');
}
if (is_array($key)) {
return app('config')->set($key);
}
return app('config')->get($key, $default);
}
}
可见没有提供获取所有配置文件的方法,但是接口类和实现类中是有的,所以我们就可以在程序里手动获取:
dd(app('config')->all());