当前位置: 首页 > 面试题库 >

是否可以替换(monkeypatch)PHP函数?

柴凌
2023-03-14
问题内容

您可以在Python中执行此操作,但是在PHP中可以吗?

>>> def a(): print 1
... 
>>> def a(): print 2
... 
>>> a()
2

例如:

<? function var_dump() {} ?>
Fatal error: Cannot redeclare var_dump() in /tmp/- on line 1

问题答案:

有点 晚了,但我只想指出,自PHP 5.3起,实际上有可能在不使用PHP扩展的情况下覆盖内部函数。

诀窍是您可以在名称空间内重新定义内部PHP函数。它基于PHP对函数进行名称解析的方式:

在名称空间(例如A \ B)内部,对不合格函数的调用在运行时解决。解决调用foo()的方法如下:

  1. 它从当前名称空间中查找一个函数:A \ B \ foo()。
  2. 它尝试查找并调用全局函数foo()


 类似资料:
  • 问题内容: 你能 声明这样 的函数吗? 然后像这样 重新声明 它… 这样可以覆盖函数吗? 可以吗 问题答案: 编辑 解决此答案未直接解决原始问题的评论。如果您是通过Google搜索到达的,请从此处开始 有一个名为override_function的函数可以实际使用。但是,由于此函数是Advanced PHP Debugger扩展的一部分,因此很难为生产使用提供参数。因此,我要说“否”,不可能以原始

  • 我有int的向量,我需要找到并用特定的值替换一些元素。他们都是一样的 例如:将所有元素的4替换为8。 我正在尝试c中循环中的直接内存访问。但对我来说还是很慢。 更新: 我正在上使用OpenCV对象: 函数仅在释放模式下通过指针返回值

  • 问题内容: 我想使用Streams.intRange(int start,int end,int step)实现反向排序的流。但是,似乎java.util.Streams类不再可用(但是它仍在标准库的rt.jar中)。此方法是在其他类中还是被其他方法替代? 问题答案: 实际上,JDK中再也没有这种方法了。您能获得的下一个最接近的位置是,但是只会一步一步走。 一种解决方案是实施您自己的解决方案。例如

  • 问题内容: 题 Java 8 MIME编码器和解码器是否可以 _ 替代_ 不支持的内部Java API 和? 编辑(澄清):通过直接 _ 替换,_ 我的意思是我可以使用或透明地将任何其他现有客户端代码的Java 8 MIME Base64编码器/解码器切换为旧代码。 我到目前为止的想法以及原因 根据我的调查和快速测试(请参见下面的代码), _ 它应该是直接替代品,_ 因为 基于其JavaDoc的是

  • 问题内容: 我正在制作一个程序,要求至少每秒捕获24个屏幕截图。目前,使用下面的代码,我每94毫秒仅获得1个,因此大约为10毫秒。 我不想使用任何第三方库,因为我试图将其保持尽可能小,但是如果我希望获得显着的性能提升,我会愿意的。我也试图保持该平台独立,但是,如果确实能够显着提高性能,我愿意将其限于Windows。 编辑:我现在也尝试了两种不同的方法;使用在oracles网站上找到的代码段,并在下

  • 我刚刚安装了Microsoft代码合同。这是的一部分。NET框架和Visual Studio加载项。它提供运行时检查和定义的合同的静态检查。 该工具有四个警告级别,因此我设置了最高级别。 我已经声明了违反Liskov替换原则的类。 LSP规定: 如果S是T的子类型,则T类型的对象可以替换为S类型的对象,而不改变该程序的任何期望属性 在我的例子中,违规行为是这样的:人=新孩子(23);。我们应该能够