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());
发布了116 篇原创文章 · 获赞 12 · 访问量 99万+

猜你喜欢

转载自blog.csdn.net/u012628581/article/details/100161134
今日推荐