覆盖函数默认值

时间:2014-10-11 15:50:44

标签: php

我正在尝试覆盖函数默认值,以便我可以自定义该函数。这是目前发生的事情。

脚本加载的顺序

<?php require(  dirname(__FILE__) . "/filters.php" ); ?>
<?php require(  themes_path . "/2014/functions.php" ); ?>

filter.php

这是原始功能

/* Login Page */
if( !function_exists ("customize_login" ) ){
    function customize_login( $args = array() ){
        $defaults = array(
            "image_url" => bs_url . "/system/bootstrap/images/logo.png",
            "image_alt" => "Original ALT",
            "image_title" => "Original Title",
            "image_class" => "profile-img"
        );          
        $args = array_merge( $defaults, $args);
        return $args;
    }
}

的functions.php

我在这里重写上述功能

/* Override the Login Page */
    $args = array(
        "image_alt" => "Override ALT",
        "image_title" => "Override Title",
        "image_class" => "profile-img"
    );
    call_user_func( "customize_login", $args );

的login.php

这里是我想要使用我在 functions.php 文件

上覆盖的功能的地方
$customize_login = customize_login();
  if( is_array( $customize_login ) ){
    $image_url = $customize_login["image_url"];
    $image_alt = $customize_login["image_alt"];
    $image_title = $customize_login["image_title"];
    $image_class = $customize_login["image_class"];
 }

问题?

我仍然获得原始函数值和 NOT 覆盖函数值。如何访问覆盖功能值?

1 个答案:

答案 0 :(得分:2)

您不需要使用覆盖调用方法customize_login 某处,当您需要覆盖值时,需要使用覆盖调用它:< / p>

$args = array(
    "image_alt" => "Override ALT",
    "image_title" => "Override Title",
    "image_class" => "profile-img"
);

$customize_login = customize_login($args);
  if( is_array( $customize_login ) ){
    $image_url = $customize_login["image_url"];
    $image_alt = $customize_login["image_alt"];
    $image_title = $customize_login["image_title"];
    $image_class = $customize_login["image_class"];
 }

刚才注意到,如果已经定义了函数,那么有一个条件检查customize_login()可以查看。

因此,您应该能够通过在您自己的代码中更早地声明它来替换整个函数。提供:

function customize_login($args){
       $myDefaults = array(
        "image_alt" => "Override ALT",
        "image_title" => "Override Title",
        "image_class" => "profile-img"
    );
    $args = array_merge( $myDefaults, $args);
    return $args;
}

早些时候,原始函数永远不会被定义,但是每个调用提供额外的args - 可能来自框架内 - 将按预期工作。