首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何避免两个框架因重新声明函数而发生冲突?

如何避免两个框架因重新声明函数而发生冲突?
EN

Stack Overflow用户
提问于 2016-09-05 17:44:40
回答 1查看 124关注 0票数 6

问题

我正在开发一个站点,它使用两个并行运行的PHP框架,Wordpress和CakePHP。它们都包含一个名为__()的核心函数。

我知道我可以修改任何一个框架的核心文件,以检查函数是否声明,然后不声明它:

代码语言:javascript
复制
if (!function_exists('__')) {
    function __() {
        // ...
    }
}

但是,问题是这两个框架都需要不时地自动更新,当发生这种情况时,核心文件会被重写,函数会返回,从而导致致命的错误。

Wordpress超出了我们的控制范围。使用CMS的编辑器希望能够从Wordpress管理面板自动更新框架和插件。这意味着我不能真正修改Wordpress核心来解决问题,因为每次更新时,它们都会覆盖我的更改。

CakePHP由开发人员通过Composer更新。当然,一个基本的解决方案是确保所有开发人员都知道,在执行Composer更新时,需要修改声明函数的核心文件,以修复致命错误。这仍然是一个非常糟糕的解决方案。

问题

因此,尽管我99%肯定没有永久的解决方案,但我想知道是否有任何PHP专家能够想到一种非常聪明的方法,尽管有点非常规/凌乱,可以用CakePHP内部的自定义应用程序中的一些代码来解决这个问题。如果有什么可以做的,我在PHP中不知道。

应用程序如何工作

  • 该网站的基本营销页面是纯正的Wordpress。CakePHP不加载这些页面。
  • 在站点的某些需要更复杂功能的部分上,首先加载CakePHP。在呈现页面之前,CakePHP加载Wordpress框架,然后通过Wordpress呈现页面。在这些页面中,两个框架在被声明两次的同一个函数上发生冲突。

我的想法

  1. 当CakePHP被引导到页面上时,让它继续运行直到视图被呈现。此时,只有CakePHP声明了该函数。
  2. 在加载Wordpress之前检查函数是否存在。
  3. 在某种程度上阻止Wordpress提前声明函数。我们在应用程序代码中编写了这个代码,它完全由开发人员控制,并致力于我们的Git。

我觉得发这个问题很荒谬,因为我确信这是不可能的,但是如果有一个真正聪明的方法来解决这个问题,它将是非常有用的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-11 17:01:41

正如ceejayoz所说,使用CakePHP,并在这个叉子上维护您的项目。

做出一个承诺,这将服务于您的项目,您可以提交给蛋糕团队。正如您所建议的,使__声明以它不存在为条件,在它的phpdoc中声明它为@deprecated,并创建一个名称空间版本,您将将所有内容转换为该版本。把它作为公关发给蛋糕。

当您需要更新您的叉子时,将上游分支合并到您的分支。为了使用__ 函数,您经常观察传入蛋糕的更改,并相应地对它们进行更改。吉特不会抓到这些的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39335477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档