Есть 2 класса:
namespace A;
class AClass {
function create() {
return new Test(); // по идее тут создается объект класс \A\Test()
}
}
Второй класс:
namespace B;
class BClass extends \A\AClass {
// мы унаследовали метод create(), но он все равно вернет
// нам объект класса \A\Test
// Как наиболее правильно и гибко реализовать, чтобы метод
// create в классе BClass возвращал объект класса \B\Test,
// с минимальным кодом в классе BClass
}
При этом важно, не переопределять метод create в классе BClass Спасибо.
Предложу пару вариантов.
Вариант №1 - задавать имя создаваемого класса в виде protected
члена класса, перекрывая его в наследниках.
namespace A {
class AClass {
protected $cls = "\\A\\Test";
function create() {
return new $this->cls;
}
}
class Test {}
}
namespace B {
class BClass extends \A\AClass{
protected $cls = "\\B\\Test";
}
class Test {}
}
Вариант №2. Извлекать полное имя класса во время выполнения с помощью static
, и заменять имя класса, оставляя namespace
.
function create() {
$cls = preg_replace("/(.+)\\\(\w+?)$/", "$1\\Test", static::class);
return new $cls;
}
Какие существуют виды рекламных бордов и как выбрать подходящий?
Аренда удаленного сервера: цены, провайдеры и условия. Руководство для начинающих
Как правильно использовать параметр attachments на api vk метод wallpost в php делаю так:
Хочу перед тем, как сохранить строку в базе, сделать некие манипуляцииНо данных находящихся в $this не хватает
Написал скрипт, есть необходимость проверить пришедший на него post запрос на наличие домена в блек листеТ
У меня нарисовалась мелкая, но неприятная помарка при выводе датыНа странице меток пункты списка должны выглядеть так: