是否覆盖默认的php函数?(eval)




我们可以使用以下代码简单地覆盖默认的php函数:

namespace blarg;
function time() {
  echo "test !";
}
time();

但是!是否可以覆盖"eval"函数?

namespace blarg;
function eval() {
echo "test !";
}
eval();


提前感谢

根据回答:

  1. 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语言中是一个保留词,因为它有特殊的含义——被称为语言构造。具有相同性质的其它实例是issetemptyincluderequire

最新更新