Boost.PHP是否可以覆盖核心PHP函数,例如require_once和include?
我想知道是否有可能用它来替换一些PHP核心函数逻辑和/或扩展它们。所以我想要的很简单:当一个php脚本调用Boost.PHP是否可以覆盖核心PHP函数,例如require_once和include?,php,Php,我想知道是否有可能用它来替换一些PHP核心函数逻辑和/或扩展它们。所以我想要的很简单:当一个php脚本调用require_一次(dirname(_FILE__)。“/FILE.php”)我想接收目录名(_文件)。“/file.php”使用我的函数,以某种方式创建所需的文件(在我的情况下,转到某个分布式存储),并将该文件返回给php解释器,就像它是所需的文件一样 可以使用Boost.PHP吗?我怎么能做这样的事情呢?我不知道boost,但我怀疑它,因为它们是语言结构,而不是函数 但是,您可以(或者
require_一次(dirname(_FILE__)。“/FILE.php”)代码>我想接收目录名(_文件)。“/file.php”
使用我的函数,以某种方式创建所需的文件(在我的情况下,转到某个分布式存储),并将该文件返回给php解释器,就像它是所需的文件一样
可以使用Boost.PHP吗?我怎么能做这样的事情呢?我不知道boost,但我怀疑它,因为它们是语言结构,而不是函数
但是,您可以(或者定义自己的,如)mywrapper://path/to/something“
,或者您可以覆盖文件://
包装,但后者意味着您必须在覆盖和正常之间切换,否则您无法自己打开文件系统上的文件:)要更改核心php函数的beavior,可以使用扩展名
bool runkit_函数_重命名(字符串$funcname,字符串$newname)
注意:默认情况下,只能删除、重命名或修改用户空间函数。为了覆盖内部函数,必须在php.ini中启用runkit.internal\u覆盖设置
请注意,扩展主要用于单元测试,而不是经常用于生产(至少据我所知)
所以你可以
runkit_function_rename("strlen", "org_strlen");
function strlen($string) {
return org_strlen($string + 1);
}
对于require
或isset
等属于语言结构而非函数的内容,请参见@Wrikken answer(+1),我们可以如何从PHP或通过一些扩展更改语言结构?是的,您可以,因为PHP是开源的,所以您可以在PHP中构建并重新编译它。然而,这很可能不值得你花费时间和精力。我不知道有哪种扩展可以做到这一点,而仅仅编写一个满足您需求的包装器,或者使用另一个函数,在代码中需要之前请求/创建文件,这似乎是一个非常简单的工作和防错误方法。