我想重新定义PHP中已经构建的某些函数,例如echo()或time()-我不需要在一个测试脚本中就全局定义这些函数。我认为这可以在Perl中完成,但可以在PHP中执行-这可能吗?
3 回答
炎炎设计
TA贡献1808条经验 获得超4个赞
runkit_function_redefine —用新的实现替换函数定义
注意:默认情况下,只能删除,重命名或修改用户空间功能。为了覆盖内部功能,必须在php.ini中启用runkit.internal_override设置。
翻翻过去那场雪
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());
}
}
- 3 回答
- 0 关注
- 527 浏览
添加回答
举报
0/150
提交
取消