现在我坚持使用file_exists()函数。我的项目是从存储库构建的,一个是符号链接为DocRoot,另一个是通过include_path可用于php解释器。但默认的file_exists()无法查看文件放在include_path下的某个地方,所以我需要或以某种方式用包装器重新定义这个func或者自己编写,将它包含在其他模块中并替换目录树中此func的所有匹配项。这是可能的,但不是很好,对于开发人员来说并不清楚。
我已经看过pecl-apd(2008)和pecl-runkit(2007),但我的gentoo存储库或叠加层中没有其他的pecls。那么,如何以现代方式重新定义函数呢?
== upd ===
确定。让我们深入一点。
假设我们有放置git模块的/home/me/repos/
目录和一个虚拟主机/var/srv/domain.com
,所有这些都是汇编的
repos_
\_site_root_
\_.git
\_file1
\_module1_
\_.git
\_we_need_this_file_too
\_module2_
\_.git
domain.com_
\_htdocs –> ~/repos/site_root
\_tmp
所以我们需要以某种方式将包含模块1和2的文件夹包含到项目中。然后通过vhost config将路径添加到〜/ repos到php include_path
php_admin_value include_path ".:/home/me/repos"
现在php可以
include ('module1/we_need_this_file_too');
来自我的repos目录。但是当它在包含file_exists()之前尝试检查文件时,它会失败,因为那些目录仍然对file_exists()关闭。这就是问题所在。
现在我找到了一个绝对路径的解决方法,无论如何我必须在我的项目中创建个人配置。我还想将chdir()转换为/home/me/repos/
时需要(并在vhost中描述<Directory>
部分),但这不是一个好主意。
答案 0 :(得分:2)
PHP不支持函数重载,也不可能取消定义或重新定义以前声明的函数。
好吧,正如您已经提到的,如果您安装runkit extension并使用runkit_function_redefine,或者安装APD并使用override_function,则可以。
答案 1 :(得分:1)
我正在使用php5.3中的函数重新定义库
来源:https://github.com/Bubujka/bu.defun
例子:http://defun.bubujka.org/doc.html
简单重新定义:
<?php
def('name', function(){
echo "Waserd";
});
name();
echo "\n";
def('name', function(){
echo "Bubujka";
});
name();
---
Waserd
Bubujka