2014-10-18 63 views
2

我目前被卡在一个点,在这里我正在使用自定义代码覆盖函数值,其中“call_user_func”。功能名称为“admin_branding”,可以满足其他功能覆盖它的默认值。覆盖自定义函数值

用法

<?php echo admin_branding(); ?> 

从上面的功能,结果是 “实施例1” 但结果应该是 “实施例2”,因为现在用的“的add_filter覆盖它的值“

PHP代码

/* Custom function with its custom value */ 
function custom_admin_branding(){ 
    return "Example 2"; 
} 

/* Default function with its default value */ 
function admin_branding($arg = ''){ 
    if($arg){ $var = $arg(); 
    } else { $var = "Example 1"; } 
    return $var; 
} 

/* Call User function which override the function value */ 
function add_filter($hook = '', $function = ''){ 
    call_user_func($hook , "$function"); 
} 

/* Passing function value to override and argument as custom function */ 
add_filter("admin_branding", "custom_admin_branding"); 

一个很好的例子是WordPress如何使用自定义的add_filter函数。

+0

你问如何取消设置功能? – Tim 2014-10-18 22:02:04

+0

实际上,我正在尝试使用像WordPress这样的add_filter函数。 – 2014-10-18 22:06:46

+1

为什么你认为你正在覆盖“它的价值”('admin_branding()')? 'call_user_func'会立即调用'custom_admin_branding'而不是替换任何东西。 – Niko 2014-10-18 22:08:05

回答

1

如果你想模仿的WordPress(不推荐这虽然):

$filters = array(); 

function add_filter($hook, $functionName){ 
    global $filters; 
    if (!isset($filters[$hook])) { 
     $filters[$hook] = array(); 
    } 
    $filters[$hook][] = $functionName; 
} 

function apply_filters($hook, $value) { 
    global $filters; 
    if (isset($filters[$hook])) { 
     foreach ($filters[$hook] as $function) { 
      $value = call_user_func($function, $value); 
     } 
    } 
    return $value; 
} 

// ---------------------------------------------------------- 

function custom_admin_branding($originalBranding) { 
    return "Example 2"; 
} 

function admin_branding() { 
    $defaultValue = "Example 1"; 
    return apply_filters("admin_branding", $defaultValue); // apply filters here! 
} 

echo admin_branding(); // before adding the filter -> Example 1 
add_filter("admin_branding", "custom_admin_branding"); 
echo admin_branding(); // after adding the filter -> Example 2 
+0

谢谢,这正是我期待的。 – 2014-10-18 22:40:31

1

扩大我的评论,我画了一个非常。在我将如何实现这样的事情很基本的场景:

的index.php

include "OverRides.php"; 
function Test(){ 
    return true; 
} 
function Call_OverRides($NameSpace, $FunctionName, $Value = array()){ 
    $Function_Call = call_user_func($NameSpace.'\\'.$FunctionName,$Value); 
    return $Function_Call; // return the returns from your overrides 

} 

OverRides.php

namespace OverRides; 
    function Test($Test){ 
     return $Test; 
    } 

不积极测试,概念流经实施虽然

调试:

echo "<pre>"; 
var_dump(Test()); // Output: bool(true) 
echo "<br><br>"; 
var_dump(Call_OverRides('OverRides','Test',"Parameter")); // Output: string(9) "Parameter" 
+0

到新命名空间的路由如果需要对工作结构/后端处理。我很乐意根据要求提供 – 2014-10-18 22:27:30