结合多个PHP函数

时间:2015-02-03 13:29:10

标签: php function merge drupal-7 drupal-theming

我遇到了一些涉及此问题的线程,但它们都非常具体,因此令人困惑。

一般来说,组合多个功能的最佳做法是什么?我在Drupal安装的template.php文件中使用它来进行主题化。

说我有两个功能:

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

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

当我在template.php中使用这两个函数时,我收到致命错误:无法重新声明mytheme_preprocess_page()(之前在(文件)中声明

这是完整的代码:

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)

3 个答案:

答案 0 :(得分: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) {

您可以像这样签入您的函数:{{1}}这两个中的哪一个被称为

答案 1 :(得分:0)

我的回答可能无法帮助您解决您所面临的问题,但我会回答这个问题:

  

一般来说,组合多个功能的最佳做法是什么?

组合函数的最佳方法是类。这就是他们的目的 - 将处理常见任务的函数(方法)分组并隔离它,以便您可以专注于解决一个常见的任务/问题。

一旦需要更改某个函数,您extend该类并实现新的函数功能。这使得你可以拥有任意数量的类,这些类包含具有相同名称的函数,但每个类都可以执行不同的操作。

基本上你不能以fatal error: Cannot redeclare...的方式获得。但是,这是否适用于Drupal或者是否需要完整的程序代码是我不熟悉的。

答案 2 :(得分:0)

但是这里只有一个功能,而不是2个功能。只有第二个参数是可选的。与PHP中的其他一些语言(如Java)不同,您不能拥有2个具有相同名称和不同参数的函数。你不能重载这个功能。

Same named function with multiple arguments in PHP

所以,我想,你只需复制来自"两者的内容"你的函数并将它放在一个函数上并删除其他函数。