我们可以使用以下代码简单地覆盖默认的php函数:
namespace blarg;
function time() {
echo "test !";
}
time();
但是!是否可以覆盖"eval"函数?
namespace blarg;
function eval() {
echo "test !";
}
eval();
提前感谢
根据回答:
- eval((是一个语言构造而不是函数,我们不能覆盖它
2.在我的例子中,我并没有真正覆盖time((函数。我只是在创建一个blarg\time((函数
我理解
但是
事实上,我正在像调试器一样编写sumting,我需要更改php函数或某些语言构造(例如eval(的默认行为有办法这样做吗?是否可以更改php源代码并对其进行编译?(有任何特定的文件要编辑吗?(
注意:因为这是一个语言构造而不是函数,所以不能使用变量函数手动调用它
因此,它不能被重写为echo/php/include too
namespace blarg;
function time() {
echo "test !";
}
time();
这不会覆盖内置的time()
函数。这样做的目的是创建函数blargtime()
——也就是说,time()
和blargtime()
都存在并且可以被调用,所以time()
从未被重写。
当您在blarg
命名空间中调用time()
时,内建的time()
和本地blargtime()
函数都是要调用的候选函数;然而,PHP将通过始终调用最本地的名称来消除歧义,在本例中为blargtime()
。
现在,如果我们问是否可以引入一个本地命名为eval()
的函数,答案是否定的,因为eval
在PHP语言中是一个保留词,因为它有特殊的含义——被称为语言构造。具有相同性质的其它实例是isset
、empty
、include
和require
。