PHP | Определение типа возвращаемого функцией значения через статическую переменную
Есть два класса, один наследуется другим. В первом классе есть функция возвращающая экземпляр определённого класса, она переходит и во второй, но так же возвращает экземпляр того же определённого класса. Существует ли способ сделать так, чтобы функция возвращала экземпляр другого класса, без надобности переопределения функции? Как я представляю себе что-то подобное (частично псевдокод):
class a {}
class b {}
class aSystem
{
static $type = a;
public static function get(): static::$type
}
class bSystem
{
static $type = b;
}
Ответы (2 шт):
Автор решения: vp_arth
→ Ссылка
Что-то вроде этого не устроит?
class a {}
class b extends a {}
class aSystem
{
static $type = a::class;
public static function get(): a
{
return new static::$type;
}
}
class bSystem extends aSystem
{
static $type = b::class;
}
$s = new bSystem;
var_dump($s->get()); // object(b)#2 (0) {}
Автор решения: bemulima
→ Ссылка
Судья по вашему примеру вы создаете фарику классов с одним интерфейсом, чтоб к ним обращаться нужен класс фабричный метод. Пример:
interface Product {
public function name();
}
class ProductA implements Product {
public function name(){
echo 'an A product';
}
}
class ProductB implements Product {
public function name(){
echo 'a B product';
}
}
abstract class SystemFabric
{
public function render(){
return $this->create();
}
public function create(){
}
}
class aSystem extends SystemFabric
{
public function create(){
return new ProductA;
}
}
class bSystem extends SystemFabric
{
public function create(){
return new ProductB;
}
}
var_dump((new aSystem())->render()->name());
var_dump((new bSystem())->render()->name());
подробности про паттерна фабричный метод