php覆盖供应商包类方法

时间:2017-03-02 17:11:45

标签: php composer-php

更改通过vendor文件夹中的composer安装的软件包的正确方法是什么。

A:将包目录复制到项目源(因此不再由作曲家更改)并从那里使用它。

B:扩展课程。

我认为B是正确的方法,但我发现它有两个问题。 1.扩展类可能与供应商目录中更新的基类不兼容。 ("作曲家更新") 2.如何在类链中操作方法。

$classA = new ClassA();
$classB = $classA->getsomeOtherClassInstance();
$classB->methodToChange();

即。我必须更改A类和B类,以确保调用B的扩展版本。

1 个答案:

答案 0 :(得分:0)

  1. 扩展类可能与供应商目录中更新的基类不兼容。 ("作曲家更新")
  2. 如果在composer.json文件中选择了正确的版本号,则该类应始终向后兼容。看看https://getcomposer.org/doc/articles/versions.md(请记住,这仅适用于承诺向后兼容性的代码存储库,但大多数知名人士都这样做。)

    此外,如果您愿意,您可以选择具体版本,例如' 3.7.7'这将阻止作曲家更新更新您的代码,将始终使用该版本。但最好还是做上面的事情。

    1. 如何在类链中操作方法。
    2. 如果它是一个私有方法,那么你不打算改变它,更好地寻找它的调用者并改写该方法和类。另外,看看Decorator设计模式,它允许您动态地动态改变方法的行为。