Декларация аргумента функции - передача имени класса

есть произвольный класс например class Shop implements \IShop {} и есть другой класс например

class Product
{
 private $shop;

 public function __construct(\IShop $shop)
 {
  $this->shop = $shop;
 }
}

$product = new Product(Shop::class);

выдаст ошибку, потому как Shop::class передается в виде строки, а экземпляр не нужен - так как все методы будут статичными, пробовал указывать тип в аргументе не класс, а интерфейс - результат тот же.

Вопрос: как сделать проверку - что это именно тот класс или интерфейс который мне нужен, можно даже на основе интерфейса


Ответы (1 шт):

Автор решения: u_mulder

Выяснить, является ли класс наследником другого класса (или интерфейса) зная только названия этих классов (строки) можно с помощью is_subclass_of.

→ Ссылка