当前位置:  开发笔记 > 编程语言 > 正文

重新定义PHP函数?

如何解决《重新定义PHP函数?》经验,为你挑选了3个好方法。

如果我有一个功能:

function this($a){
   return $a;
}

如果我想重新定义函数,它会像重写它一样简单吗?

function this($a, $b){  //New this function
   return $a * $b;
}

Annika Backs.. 23

不,那会引发一个错误:

Fatal error: Cannot redeclare foo()

runkit提供选项,包括runkit_function_rename()runkit_function_redefine().



1> Annika Backs..:

不,那会引发一个错误:

Fatal error: Cannot redeclare foo()

runkit提供选项,包括runkit_function_rename()runkit_function_redefine().



2> Gordon..:

如果你的意思是在Java意义上的重载,那么答案是否定的,这是不可能的.

在函数上引用PHP手册:

PHP不支持函数重载,也不可能取消定义或重新定义以前声明的函数.

您可以使用runkit扩展,但在生产场景中使用runkit通常被认为是值得怀疑的做法.如果要在运行时交换算法,请查看策略模式或匿名函数.

如果通过重新定义你的意思是添加到现有的userland函数,重构,替换或重写,那么是:它就像你所显示的一样简单.只需将其他代码添加到该函数中,但请确保为向后兼容性设置了默认值.

另一种选择是使用http://antecedent.github.io/patchwork

拼布是一个PHP库,能够在运行时重新定义用户定义的函数和方法,松散的复制功能runkit_function_redefine在纯PHP 5.3的代码,其中,除其他事项外,让你可以使用测试双打代替静态和私有方法.



3> rustyx..:

您不能在PHP中重新定义或"取消定义"函数(不使用第三方模块).但是,您可以有条件地定义函数.

所以,如果你知道函数A可以在别处定义,但并非总是如此,你可以像这样包装它:

if (!function_exists('A')) {
    function A() {
        // default A implementation
    }
}

然后,您只需要确保首先遇到所需的实现:

function A() {
    // another A implementation
}

推荐阅读
乐韵答题
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有