我们可以使用以下代码简单地覆盖默认的php函数:
namespace blarg;
function time() {
echo "test !";
}
time();
但是!是否可以覆盖“eval”功能?
namespace blarg;
function eval() {
echo "test !";
}
eval();
?
根据回答:
我明白了
的 BUT
实际上我像写一个调试器,我需要改变php functons或某些语言结构的默认行为(例如eval)
反正有没有这样做?
是否可以更改php源并进行编译? (是否有任何特定文件要编辑?)
答案 0 :(得分:3)
注意:因为这是一种语言结构而不是函数,所以无法使用变量函数调用它Manual
因此,它不能被覆盖为echo / php / include
答案 1 :(得分:1)
namespace blarg;
function time() {
echo "test !";
}
time();
这不会覆盖内置time()
函数。这样做是创建函数blarg\time()
- 也就是说,time()
和blarg\time()
都存在且可以被调用,所以从来没有被time()
覆盖。
当您在time()
命名空间中调用blarg
时,内置time()
和本地blarg\time()
函数都是要调用的候选函数;但是,PHP将通过始终调用最本地名称来消除歧义,在本例中为blarg\time()
。
现在,如果我们问是否可以引入一个名为eval()
的本地函数,答案是否定的,因为eval
是PHP语言中的保留字,因为它具有特殊含义 - 被称为语言结构。其他相同性质的示例包括isset
,empty
,include
和require
。