重新定义内置的PHP函数

我想重新定义PHP中已经构建的某些函数,例如echo()或time()-我不需要在一个测试脚本中就全局定义这些函数。

我认为这可以在Perl中完成,但可以在PHP中执行-这可能吗?


PIPIONE
浏览 528回答 3
3回答

炎炎设计

runkit_function_redefine —用新的实现替换函数定义注意:默认情况下,只能删除,重命名或修改用户空间功能。为了覆盖内部功能,必须在php.ini中启用runkit.internal_override设置。

翻翻过去那场雪

echo不是函数,而是语言构造。我什么都没有。但是time()由于PHP-5.3的命名空间回退策略,诸如此类的函数调用可以被覆盖:对于函数[…],如果不存在命名空间函数[…],PHP将退回到全局函数[…]。例如,您可以提供time()非全局名称空间中的不合格函数调用。foofoo\time()我个人就是用它来模拟例如time()单元测试。我在库PHP-Mock中发布了这些模拟:namespace foo;use phpmock\phpunit\PHPMock;class FooTest extends \PHPUnit_Framework_TestCase{    use PHPMock;    public function testBar()    {        $time = $this->getFunctionMock(__NAMESPACE__, "time");        $time->expects($this->once())->willReturn(3);        $this->assertEquals(3, time());    }}
打开App,查看更多内容
随时随地看视频慕课网APP