2015-07-03 8 views
5

Otrzymuję dziwny błąd w klasie implementującej interfejs.Instancja nie zwracająca klasy PHP

Błąd:

Catchable fatal error: Argument 1 passed to MyApp\Library\Cache::__construct() must be an instance of MyApp\Contacts\CacheInterface, instance of MyApp\Driver\Cache\File given

Klasa File: Klasa

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 
    } 
} 

Cache:

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

final class Cache { 

    private $cache; 

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

    ... more methods 
} 

Interfejs:

namespace MyApp\Contracts; 
interface CacheInterface { 

    public function get($key); 
    public function set($key, $value); 
    public function delete($key); 
    public function flush_cache(); 
} 

zaimplementowany jako usługa w pryszcz Container tak:

$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); 
}; 

oczywiście 4 klasy kierowcy i pamięci podręcznej są dołączone use hasła przed klasą pojemnika.

Nie widzę tego, co tracę Zrobiłem kilka innych umów w dokładnie tej samej procedurze. Wszelkie pomysły będą mile widziane.

+0

Tak robią, przepraszam zapomniałem wspomnieć o tym. –

Odpowiedz

1

W swojej File.class, można spróbować wymienić:

use MyApp\Contracts\CacheInterface; 

Z

use MyApp\Contacts\CacheInterface; 

A dla interfejsu, należy użyć:

namespace MyApp\Contacts; 
+0

Więc to był typ ... geez Musiałem zacząć od tego przez 30 minut i nadal tego nie widziałem. Dzięki, Dave. –

Powiązane problemy