Объединение нескольких функций PHP

Я сталкивался с некоторыми темами, связанными с этим, но все они довольно специфичны и поэтому сбивают с толку.

Как лучше всего сочетать несколько функций в целом? Я использую это в файле template.php установки Drupal для тематических целей.

Скажем, у меня есть две функции:

function mytheme_preprocess_page(&$variables){
(...)
}

а также

function mytheme_preprocess_page(&$vars, $hook){
(...)
}

Когда я использую эти две функции в моем template.php, я получаю фатальная ошибка: невозможно повторно объявить mytheme_preprocess_page () (ранее объявлено в (file).

Вот полный код:

function mytheme_preprocess_page(&$variables){

// Add information about the number of sidebars.
if (!empty($variables['page']['sidebar_first']) && !empty($variables['page']['sidebar_second'])) {
$variables['content_column_class'] = ' class="col-sm-6 main-content"';
} elseif (!empty($variables['page']['sidebar_first']) || !empty($variables['page']['sidebar_second'])) {
$variables['content_column_class'] = ' class="col-sm-9 main-content"';
} else {
$variables['content_column_class'] = ' class="col-sm-12 main-content"';
}
}function mytheme_preprocess_page(&$vars, $hook){
if (isset($vars['node'])) {
switch ($vars['node']->type) {
case 'article':
$vars['title'] = '';
break;
}
}
}

Я понимаю что должен сливаться эти функции. Вопрос: как?

Потому что эти (&$variables) а также (&$vars, $hook) кажется необходимым для каждой отдельной части.

0

Решение

определяя это так:

function mytheme_preprocess_page(&$variables, $hook = null) {

Делает параметр hook необязательным, после чего вы можете вызвать функцию следующим образом:

mytheme_preprocess_page($var); или же mytheme_preprocess_page($var, $another_var),

В первом случае $hook будет null, во-вторых $hook будет иметь значение $another_var

Вы можете проверить свою функцию следующим образом: if ($hook === null) { Какой из двух называется

0

Другие решения

Мой ответ, вероятно, не поможет вам решить проблему, с которой вы столкнулись, но я отвечу на вопрос:

Как лучше всего сочетать несколько функций в целом?

Лучший способ объединить функции — это класс. Это их цель — сгруппировать функции (методы), которые имеют дело с общей задачей, и изолировать ее, чтобы вы могли сосредоточиться на решении этой одной общей задачи / проблемы.

Как только функция должна быть изменена, вы extend класс и реализовать новые функции функции. Это позволяет вам иметь любое количество классов, которые содержат функции с одинаковыми именами, но каждый из них может выполнять разные функции.

В основном вы не можете получить fatal error: Cannot redeclare... сюда. Однако, не знаю, применимо ли это к Drupal или требует полностью процедурного кода.

0

Но здесь у вас есть только одна функция, а не 2 функции. Только второй параметр является необязательным. В отличие от некоторых других языков (например, Java) в PHP, у вас не может быть двух функций с одинаковым именем и разными параметрами. Вы не можете перегрузить функцию.

Одноименная функция с несколькими аргументами в PHP

Так что, я думаю, вам просто нужно скопировать контент из «обеих» ваших функций, поместить его в одну функцию и удалить другую.

0
По вопросам рекламы [email protected]