我遇到了一些处理这个问题的帖子,但它们都是非常具体的,因此令人困惑。
通常情况下,组合多个函数的最佳实践是什么?出于主题化的目的,我在Drupal安装的template.php文件中使用它。
假设我有两个函数:
function mytheme_preprocess_page(&$variables){
(...)
}
和
function mytheme_preprocess_page(&$vars, $hook){
(...)
}
当我在我的文件中使用这两个函数时,我得到了致命的错误:无法重新声明mytheme_preprocess_page() (之前在( template.php )中声明的。
下面是完整的代码:
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)
似乎对于每个单独的部分都是必需的。
发布于 2015-02-03 21:32:52
它的定义如下:
function mytheme_preprocess_page(&$variables, $hook = null) {
将钩子参数设置为可选,然后可以像这样调用函数:
mytheme_preprocess_page($var);
或mytheme_preprocess_page($var, $another_var)
。
在第一种情况下,$hook
将为null
,在第二种情况下,$hook
的值将为$another_var
您可以像这样签入函数:if ($hook === null) {
这两个函数中的哪一个被调用
发布于 2015-02-03 21:37:42
但是这里你只有一个函数,而不是两个函数。只有第二个参数是可选的。与其他一些语言(如Java)不同,在PHP中你不能有两个同名不同参数的函数。您不能重载该函数。
Same named function with multiple arguments in PHP
所以,我想,你只需要从你的“两个”函数中复制内容,并将其放在一个函数上,然后删除另一个函数。
https://stackoverflow.com/questions/28300133
复制相似问题