问题
我正在使用两个并行运行的PHP框架,Wordpress和CakePHP的网站上工作。它们都包含一个名为__()
的核心函数。
我知道我可以修改任一框架的核心文件来检查函数是否已声明,然后不声明它:
if (!function_exists('__')) {
function __() {
// ...
}
}
然而,问题是两个框架都需要不时自动更新,当发生这种情况时,核心文件会被重写并且函数会返回,从而导致致命的错误。
Wordpress不受我们的控制。使用CMS的编辑器希望能够从Wordpress管理面板自动更新框架和插件。这意味着我无法真正修改Wordpress核心来解决问题,因为他们只会在每次更新时覆盖我的更改。
CakePHP由开发人员通过Composer进行更新。当然,一个基本的解决方案是确保所有开发人员都知道在执行Composer更新时,需要修改声明该函数的核心文件以修复致命错误。这仍然是一个非常糟糕的解决方案。
问题
所以虽然我99%肯定没有永久性的解决方案,但我想知道是否有任何PHP专家能够想到一个非常聪明的,尽管有些非传统/凌乱,用一些代码来解决这个问题。 CakePHP中的自定义应用程序。如果有些事情可以做,我不会在PHP中知道。
应用程序的工作原理
该网站的基本营销页面是纯Wordpress。 CakePHP不会在这些页面上加载。
在网站的某些需要更复杂功能的部分,CakePHP首先加载 。在呈现页面之前,CakePHP加载Wordpress框架,然后通过Wordpress呈现页面。 这两个框架在同一个被声明两次的函数上发生冲突的页面。
我的想法
当CakePHP在页面上引导时,让它运行直到要呈现视图。此时,只有CakePHP声明了该函数。
在加载Wordpress之前检查函数是否存在。
以某种方式阻止Wordpress提前重新声明该功能。我们在应用程序代码中编写了这个代码,该代码完全由开发人员控制并致力于我们的Git仓库。
我觉得发布这个问题很荒谬,因为我确定这是不可能的,但如果有一种非常聪明的方法可以解决这个问题,那就太有用了。
答案 0 :(得分:0)
正如ceejayoz所说,派上CakePHP,并在那个分支上维护你的项目。
进行提交,为您的项目提供服务,并提交给Cake团队。正如你的建议,使__
声明条件尚未存在,在其phpdoc中声明@deprecated
,并创建一个你将所有内容转换为的命名空间版本。将其作为PR发送给Cake。
当您需要更新分支时,将上游分支合并到您的分支中。 您非常关注使用__
函数的传入Cake更改并相应地更改它们。 Git不会抓住这些。