为了账号安全,请及时绑定邮箱和手机立即绑定

重新定义内置的PHP函数

重新定义内置的PHP函数

PHP
PIPIONE 2019-10-21 15:12:12
我想重新定义PHP中已经构建的某些函数,例如echo()或time()-我不需要在一个测试脚本中就全局定义这些函数。我认为这可以在Perl中完成,但可以在PHP中执行-这可能吗?
查看完整描述

3 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

runkit_function_redefine —用新的实现替换函数定义


注意:默认情况下,只能删除,重命名或修改用户空间功能。为了覆盖内部功能,必须在php.ini中启用runkit.internal_override设置。


查看完整回答
反对 回复 2019-10-21
?
翻翻过去那场雪

TA贡献2065条经验 获得超14个赞

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());

    }

}


查看完整回答
反对 回复 2019-10-21
  • 3 回答
  • 0 关注
  • 527 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信