Boost.PHP可以覆盖核心PHP函数,例如require_once和include吗?

时间:2011-03-13 12:37:10

标签: php

我想我可以使用Boost.PHP替换一些PHP核心函数逻辑和/或扩展它们。所以我想要的很简单:当一个php脚本调用require_once(dirname(__FILE__) . "/file.php");时,我希望用我的函数接收dirname(__FILE__) . "/file.php",以某种方式创建所需的文件(在我的情况下,转到一些分布式存储),然后返回该文件到PHP解释器就好像它是所需的文件。

Boost.PHP可以吗?我怎么能这样做?

2 个答案:

答案 0 :(得分:6)

我不知道提升,但我对此表示怀疑,因为它们是语言结构,而不是函数。

你可以write your own wrapper for a stream / protocol(或者定义你自己的,'mywrapper://path/to/something',或者你可以覆盖file://包装,但后者意味着你必须在覆盖和放大之间保持翻转;正常,否则你无法自己打开文件系统上的文件:)

答案 1 :(得分:5)

要更改核心php功能的优点,您可以使用runkit扩展名。

  

bool runkit_function_rename(string $ funcname,string $ newname)

     

注意:默认情况下,只能删除,重命名或修改用户空间功能。要覆盖内部函数,必须在php.ini中启用runkit.internal_override设置。

请注意,扩展程序主要用于单元测试,而不是经常用于生产(至少我知道)。

所以你可以

runkit_function_rename("strlen", "org_strlen");
function strlen($string) {
    return org_strlen($string + 1); 
}

对于requireisset等语言构造而非函数的内容,请参阅@Wrikken答案(+1)