问题
我正在开发一个站点,它使用两个并行运行的PHP框架,Wordpress和CakePHP。它们都包含一个名为__()的核心函数。
我知道我可以修改任何一个框架的核心文件,以检查函数是否声明,然后不声明它:
if (!function_exists('__')) {
function __() {
// ...
}
}但是,问题是这两个框架都需要不时地自动更新,当发生这种情况时,核心文件会被重写,函数会返回,从而导致致命的错误。
Wordpress超出了我们的控制范围。使用CMS的编辑器希望能够从Wordpress管理面板自动更新框架和插件。这意味着我不能真正修改Wordpress核心来解决问题,因为每次更新时,它们都会覆盖我的更改。
CakePHP由开发人员通过Composer更新。当然,一个基本的解决方案是确保所有开发人员都知道,在执行Composer更新时,需要修改声明函数的核心文件,以修复致命错误。这仍然是一个非常糟糕的解决方案。
问题
因此,尽管我99%肯定没有永久的解决方案,但我想知道是否有任何PHP专家能够想到一种非常聪明的方法,尽管有点非常规/凌乱,可以用CakePHP内部的自定义应用程序中的一些代码来解决这个问题。如果有什么可以做的,我在PHP中不知道。
应用程序如何工作
我的想法
我觉得发这个问题很荒谬,因为我确信这是不可能的,但是如果有一个真正聪明的方法来解决这个问题,它将是非常有用的。
发布于 2016-09-11 17:01:41
正如ceejayoz所说,使用CakePHP,并在这个叉子上维护您的项目。
做出一个承诺,这将服务于您的项目,您可以提交给蛋糕团队。正如您所建议的,使__声明以它不存在为条件,在它的phpdoc中声明它为@deprecated,并创建一个名称空间版本,您将将所有内容转换为该版本。把它作为公关发给蛋糕。
当您需要更新您的叉子时,将上游分支合并到您的分支。为了使用__ 函数,您经常观察传入蛋糕的更改,并相应地对它们进行更改。吉特不会抓到这些的。
https://stackoverflow.com/questions/39335477
复制相似问题