2014-10-11 167 views
0

我試圖覆蓋一個函數的默認值,以便我可以自定義該函數。以下是目前發生的事情。覆蓋一個函數的默認值

在該腳本加載

<?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"]; 
} 

問題?

我仍然得到原始函數值和不是覆蓋函數值。我如何訪問覆蓋函數值?

回答

2

你並不需要調用方法customize_login地方你覆蓋,你需要用覆蓋調用它,當你需要的值被覆蓋:

$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; 
} 

某處較早,原有的功能將永遠不會被定義,但每次通話提供額外的參數 - 從框架內可能 - 即會正常運行。

+0

感謝您的回答。我想到了這一點,但沒有實現這一點,因爲我不想在開發後觸摸login.php頁面,因爲它不會是安全升級。 – 2014-10-11 16:00:10

+3

只要'customize_login()'在不帶'$ args'的情況下被調用,它將返回裏面定義的默認值。 – dognose 2014-10-11 16:00:53

+0

@RedVirus看到我的編輯。 – dognose 2014-10-11 16:09:00