【问题标题】:Combining multiple PHP functions组合多个 PHP 函数
【发布时间】:2015-04-02 17:18:06
【问题描述】:

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

一般来说,组合多个功能的最佳做法是什么?我在 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) 似乎对于每个单独的部分都是必需的。

【问题讨论】:

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


    【解决方案1】:

    这样定义:

    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) { 调用两者中的哪一个

    【讨论】:

    • 谢谢。在您的帮助下,我将其简化为 one 功能。函数名称现在看起来像这样:function mytheme_preprocess_page(&$vars, $hook = null){ 我把我以前的两个函数的内容都放在那里了。注意:我在第一个块中将$variables 替换为$vars。我不知道两者都做了同样的事情。
    • 我要添加的一个建议是实际实现这三个功能。第一个函数 (mytheme_preprocess_page) 将按照建议进行定义,但让该函数调用您现在已使用唯一名称重命名的其他两个函数之一。让你的函数做一件事并做好它是一种很好的做法,而不是根据传入的参数改变其行为的大型函数。
    【解决方案2】:

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

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

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

    一旦需要更改功能,您就可以extend 类并实现新的功能功能。这使您可以拥有任意数量的包含同名函数的类,但每个类可以做不同的事情。

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

    【讨论】:

      【解决方案3】:

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

      Same named function with multiple arguments in PHP

      所以,我想,您只需从“两个”函数中复制内容并将其放在一个函数上并删除另一个函数。

      【讨论】:

        猜你喜欢
        • 2013-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-08
        • 1970-01-01
        相关资源
        最近更新 更多