Я сталкивался с некоторыми темами, связанными с этим, но все они довольно специфичны и поэтому сбивают с толку.
Как лучше всего сочетать несколько функций в целом? Я использую это в файле 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)
кажется необходимым для каждой отдельной части.
определяя это так:
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) {
Какой из двух называется
Мой ответ, вероятно, не поможет вам решить проблему, с которой вы столкнулись, но я отвечу на вопрос:
Как лучше всего сочетать несколько функций в целом?
Лучший способ объединить функции — это класс. Это их цель — сгруппировать функции (методы), которые имеют дело с общей задачей, и изолировать ее, чтобы вы могли сосредоточиться на решении этой одной общей задачи / проблемы.
Как только функция должна быть изменена, вы extend
класс и реализовать новые функции функции. Это позволяет вам иметь любое количество классов, которые содержат функции с одинаковыми именами, но каждый из них может выполнять разные функции.
В основном вы не можете получить fatal error: Cannot redeclare...
сюда. Однако, не знаю, применимо ли это к Drupal или требует полностью процедурного кода.
Но здесь у вас есть только одна функция, а не 2 функции. Только второй параметр является необязательным. В отличие от некоторых других языков (например, Java) в PHP, у вас не может быть двух функций с одинаковым именем и разными параметрами. Вы не можете перегрузить функцию.
Одноименная функция с несколькими аргументами в PHP
Так что, я думаю, вам просто нужно скопировать контент из «обеих» ваших функций, поместить его в одну функцию и удалить другую.