#php #oop #static #coding-style
#php #ооп #статический #стиль кодирования
Вопрос:
Я написал несколько веб-фреймворков на PHP. Мне посоветовали ничего не делать в статическом контексте. Но у меня есть несколько вопросов по этому поводу.
Представьте себе следующий класс:
class Image extends HtmlControl {
public $src;
public $alt;
function getDetailPath()
{
return 'Common/Image';
}
}
В этом нет ничего особенного. Это класс для рендеринга изображения в Html. Мой базовый класс имеет следующую текущую реализацию:
abstract class HtmlControl {
private $template;
abstract function getDetailPath();
public function __construct(ViewInformation $viewInformation) {
$this->template = 'foo/bar/' . $viewInformation->getEndpoint() . '/' . $this->getDetailPath() . '.php';
}
public function render() {
$output = '';
//Load template end fill $output
return $output;
}
}
Также ничего особенного. В основном он преобразует тип конечной точки (что-то вроде интерфейса или серверной части) в соответствующий файл шаблона и предоставляет метод render для получения выходных данных.
Проблема в том, что мне нужно каждый раз для каждой части html-элемента управления указывать $viewInformation
параметр.
$img = new Image($this->_info);
На мой взгляд, что-то подобное было бы намного приятнее:
$img = new Image();
Поэтому мне пришлось бы сохранить состояние, какая конечная точка должна использоваться, в статическом контексте. Что-то вроде этого (обратите внимание на Request::getEndpoint()
часть):
abstract class HtmlControl {
private $template;
abstract function getDetailPath();
public function render() {
$template = 'foo/bar/' . Request::getEndpoint() . '/' . $this->getDetailPath() . '.php';
$output = '';
//Load template end fill $output
return $output;
}
}
Мой вопрос: нормально ли в этом случае иметь конечную точку в статическом контексте? Если нет, может ли моя текущая реализация улучшиться?
Комментарии:
1. Почему бы не передать контекст, когда вы это делаете
->render()
? Кроме того, я думаю, что если вы вдаетесь в такие подробности, возможно, вы бы предпочли использоватьDOMDocument
🙂2. Плохая сторона статического материала — это, по сути, скрытые зависимости; вторичными по отношению к этому являются проблемы, связанные с тестированием.
3. Спасибо @Jack , это хороший момент. Я изменю это. Вы дали мне небольшой, но отличный ответ. Это действительно помогает мне. Поскольку я загружаю «$ img» в «$container», мой $container может справиться с этим. Разве лес не из-за деревьев 🙂