Я, вероятно, не понимаю чего-то очень простого.Интерфейсы и аутсорсинг
Тим делает гипотетическое приложение, которое использует сеансы, он ленив и хочет использовать существующие решения вместо того, чтобы создавать свои собственные. Он обнаруживает 2 разработчиков, Джона и Фабьен, которые имеют exacly, что ему нужно (но не знают о существовании друг друга):
Фабьен, который создал 2 классов и 1 интерфейс
namespace Fabien;
interface SessionStorageInterface {
public function set($key, $val);
public function get($key);
}
class Storage implements SessionStorageInterface {
...
}
class Session {
public function __construct(SessionStorageInterface $storage){
...
}
}
и Иоанн, почитаемые создано: 1 класс и 1 интерфейс, соответствующий интерфейс, созданный Фабьен
namespace John;
interface SessionStorageInterface {
public function set($key, $val);
public function get($key);
}
class Storage implements SessionStorageInterface {
...
}
Тим считает, что класс Джона хранения значительно превосходит тот, сделанные Фабьен и хочет использовать его с классом Session
$storage = new John\Storage;
$session = new Fabien\Session($storage);
Но это не сработает, поскольку класс Session Fabiens принимает только классы, которые реализуют Fabien \ SessionStorageInterface.
Как Тим может использовать класс Session, предоставленный Fabien, в сочетании с классом хранения, созданным Джоном?
Это будет работать, если класс Session не используется тип намекая. – bitWorking
@redreggae Конструкция класса Session частично основана на структуре в symfony, и, к сожалению, она использует тип намека. –
Это действительно читается как домашнее задание –