20,359
社区成员
发帖
与我相关
我的任务
分享
<?php
function show() {
if (function_exists('ext_show')) {
ext_show();
return;
}
echo 'abc';
}
“重写”函数则为:
<?php
function ext_show(){
echo 'ext_abc';
}
但是跟你现在的需求还是有差别的,那么我们可以考虑先用程序处理一下a.php,以下是方案的简单测试代码:
a.php
<?php
function show() {
echo 'a.php';
}
function get() {
echo 'a.php->get';
}
extention.php
<?php
function show() {
echo 'extention.php';
}
result.php
<?php
include 'extention.php';
//include 'a.php';
$a = file_get_contents('a.php');
$a = str_replace(array('<?php', '?>'), '', $a);
$a = str_replace(array("\r\n", "\r", "\n"), '', $a);
$a = str_replace('function ', PHP_EOL.'function ', $a);
$a_fun = explode(PHP_EOL, $a);
$new_a = '';
foreach($a_fun as $fun) {
if (preg_match('|function\s(.*?)\(|i', $fun, $match)) {
$fun_name = trim($match[1]);
if (!function_exists($fun_name)) {
$new_a .= $fun.PHP_EOL;
}
}
}
eval($new_a);
show();
这个还可以优化为:
先判断是否存在 a.runtime.php 文件,如果不存在,执行上面的处理过程,将$new_a写入到 a.runtime.php 然后include进来namespace testb;
function test(){
return 'b.php';
}
test/c.php
namespace testc;
function test(){
return 'c.php';
}
test/a.php 来调用
include('b.php');
include('c.php');
echo \testb\test();
echo \testc\test();