类不返回接口实例PHP

Vin*_*ein 5 php interface class

我在实现接口的类上遇到了一个奇怪的错误.

错误:

可捕获的致命错误:传递给MyApp\Library\Cache :: __ construct()的参数1必须是MyApp\Contacts\CacheInterface的实例,MyApp\Driver\Cache\File的实例给出

文件类:

namespace MyApp\Driver\Cache;
use MyApp\Library\Config;
use MyApp\Contracts\CacheInterface;

class File implements CacheInterface {
    private $expire;

    public function __construct($expire, Config $config) {
        $this->expire = $expire;
        $this->config = $config;

        ... more code
    }
}
Run Code Online (Sandbox Code Playgroud)

缓存类:

namespace MyApp\Library;
use MyApp\Contacts\CacheInterface;

final class Cache {

    private $cache;

    public function __construct(CacheInterface $cache) {
        $this->cache = $cache;
    }

    ... more methods
}
Run Code Online (Sandbox Code Playgroud)

接口:

namespace MyApp\Contracts;
interface CacheInterface {

    public function get($key);
    public function set($key, $value);
    public function delete($key);
    public function flush_cache();
}
Run Code Online (Sandbox Code Playgroud)

作为Pimple容器中的服务实现,如下所示:

$this->data['cache'] = function ($data) {
    switch ($data['config_cache_type_id']):
        case 'apc':
            $driver = new Apc($data['cache.time'], $data['config']);
            break;
        case 'mem':
            $driver = new Mem($data['cache.time'], $data['config']);
            $driver->connect();
            break;
        case 'file':
        default:
            $driver = new File($data['cache.time'], $data['config']);
            break;
    endswitch;

    return new Cache($driver);
};
Run Code Online (Sandbox Code Playgroud)

当然use,容器类之前的关键字包含4个Driver和Cache 类.

我看不出我错过了什么我已经完成了几个其他合同完全相同的程序.任何想法,将不胜感激.

Dav*_*hen 1

在您的 File.class 中,您可以尝试替换:

use MyApp\Contracts\CacheInterface;
Run Code Online (Sandbox Code Playgroud)

use MyApp\Contacts\CacheInterface;
Run Code Online (Sandbox Code Playgroud)

对于您的界面,请使用:

namespace MyApp\Contacts;
Run Code Online (Sandbox Code Playgroud)