Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Boost.PHP是否可以覆盖核心PHP函数,例如require_once和include?_Php - Fatal编程技术网

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

Boost.PHP是否可以覆盖核心PHP函数,例如require_once和include?,php,Php,我想知道是否有可能用它来替换一些PHP核心函数逻辑和/或扩展它们。所以我想要的很简单:当一个php脚本调用require_一次(dirname(_FILE__)。“/FILE.php”)我想接收目录名(_文件)。“/file.php”使用我的函数,以某种方式创建所需的文件(在我的情况下,转到某个分布式存储),并将该文件返回给php解释器,就像它是所需的文件一样 可以使用Boost.PHP吗?我怎么能做这样的事情呢?我不知道boost,但我怀疑它,因为它们是语言结构,而不是函数 但是,您可以(或者

我想知道是否有可能用它来替换一些PHP核心函数逻辑和/或扩展它们。所以我想要的很简单:当一个php脚本调用
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中构建并重新编译它。然而,这很可能不值得你花费时间和精力。我不知道有哪种扩展可以做到这一点,而仅仅编写一个满足您需求的包装器,或者使用另一个函数,在代码中需要之前请求/创建文件,这似乎是一个非常简单的工作和防错误方法。