如何“注入”内置的php函数

时间:2011-07-10 10:34:45

标签: php function extend inject built-in

如何在不创建具有其他名称的新功能的情况下修改内置php函数的返回值,并将以前名称的所有已使用函数重命名为新函数? e.g。

function time() {
    return time()-1000;
}

当然这不会通过,是不是有类似“function time()extends time(){}”之类的东西?

3 个答案:

答案 0 :(得分:5)

使用APD PECL扩展程序,您可以renameoverride内置函数。

//we want to call the original, so we rename it
rename_function('time', '_time()');

//now replace the built-in time with our override
override_function('time', '', 'return my_time();');

//and here's the override
function my_time($){
        return _time()-1000;  
}

APD用于调试目的,因此这不是您应该为生产代码考虑的技术。

答案 1 :(得分:2)

你做不到。

考虑使用date_default_timezone_set()setlocale()

答案 2 :(得分:1)

为什么要覆盖PHP的功能呢?如果某些功能没有达到您想要的功能,那么创建自己的功能。如果它覆盖,请使用其他名称或创建一个类并将该函数放入其中。

你想要达到的目标是解决问题的错误方法!!!

一些例子

而不是功能名称time(),您可以cTime()(自定义时间) 就像我为print_r()创建我自己的函数printr()以我的方式打印数组

或类似

class FUNCTIONS {
    public function time() {
        return time()-1000;
    }
}
//Now access using
FUNCTIONS::time();