@dev400

Пустой аргумент в методе?

Иногда приходится пропускать элемент в вызове метода, насколько это криво?

Пример

Метод render()
/**
	 * @param $actionView, темплейт action`а

	 * @param array $actionData, массив данных для передачи в action

	 * @param null $layout, указывается, если требуется
          кастомный лейаут для экшена

	 * @param null $layoutData, массив данных для передачи
          в лейаут(нужно передать виджет, например)

	 * @return string
	 */
	public function render( 
            $actionView, 
            $actionData = [], 
            $layout = null, 
            $layoutData = null
        ) {
		$action = new self( $actionView );
		$layout = new self( $layout );
		$action->data = $actionData;
		$layout->data = ['content' => $action->rendering()];
		$layout->set( 'title', $action->title );
		return $layout->rendering();

	}


Вызываем для главной страницы
/**
     * @return string
     */
	public function index()
        {
            return $this->view->render(
                "/site/index",
                [
                  "widget" => $this->view->render("/site/news/widget")
                ]
            );
	}

аргументы идут по порядку, все хорошо.

А при вызове 404ой ошибки(к примеру), мне не нужно передавать туда
никакие данные, но нужно выбрать кастомный layout
/**
	 * class Error
	 * @return string
	 */
	public function index()
	{
		return $this->view->render(
			"/site/not_found",
			[],
			"/layouts/error"
		);
	}

и приходится передавать пустой массив во второй аргумент.
Нормально ли это?
  • Вопрос задан
  • 188 просмотров
Решения вопроса 1
Decadal
@Decadal
учитывая то что по умолчанию в функции render $actionData = [], вы подразумеваете, что это нормально. Нет возможности выбирать, какому параметру оставлять значение по умолчанию, а какому присваивать, поэтому выживаем как можем
upd:
если вас этот факт смущает, сделайте часть параметров передаваемыми через ассоциативный массив.
и будет у вас
function render($actionView, $params = []) {
// понеслось 
 $actionData = (isset($params["actionData"]) && $params["actionData"]) 
 ? $params["actionData"]
: [];
//и тд
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы