我想我可以使用Boost.PHP替换一些PHP核心函数逻辑和/或扩展它们。所以我想要的很简单:当一个php脚本调用require_once(dirname(__FILE__) . "/file.php");
时,我希望用我的函数接收dirname(__FILE__) . "/file.php"
,以某种方式创建所需的文件(在我的情况下,转到一些分布式存储),然后返回该文件到PHP解释器就好像它是所需的文件。
Boost.PHP可以吗?我怎么能这样做?
答案 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);
}
对于require
或isset
等语言构造而非函数的内容,请参阅@Wrikken答案(+1)