【问题标题】:How do I handle different versions of a class that I'm extending in PHP?如何处理我在 PHP 中扩展的类的不同版本?
【发布时间】:2020-07-03 18:33:33
【问题描述】:

限制 1:我无法控制 A 是什么类,也无法控制它来自哪个更大的软件版本。我必须提交它的规则。它没有版本控制,什么都没有,它只是我需要的一个类。我们说的是 WordPress,所以,不会添加这些东西 :)

限制 2:我必须按原样运送我的产品。我无法将客户重定向到我的插件的V5.1

我在B 内部扩展了一个类A,我们现在在version 5.0

class B extends A
{
    public function feedback( $string )
}

现在,如您所见,A 有这个函数feedback,它只接受一个参数。一切都好,它应该工作。但是如果A 改变它会发生什么?那么,当升级到version 5.1 时,我们的feedback 函数看起来像这样:

public function feedback( $string, ...$args )

一旦我们重新运行我们的代码,我们就会收到Declaration of B::feedback( $string ) must be compatible with A::feedback( $string, ...$args ) 错误。

我希望我的客户能够在其软件的几个版本上使用该产品。由于我的产品是一个插件,我必须尊重并努力使其适用于所有这些版本。

我该如何处理?

【问题讨论】:

  • 使用semver版本,让消费者放心
  • @LawrenceCherone 我没有这个选择。 A 类不是我可以控制的,也不是整个软件的版本。我必须服从他们的规则。
  • 如果您依赖的库不支持向后兼容性 - 那么您必须维护软件的多个版本
  • @IłyaBursov 该死。你能给我链接一些关于如何确保想要使用我的代码的开发人员不会发生这种情况的好文章吗?专门用于 PHP。

标签: php versioning


【解决方案1】:

如果您正在编写具有依赖关系的软件,并且您希望支持多个不兼容的版本,那么通常这意味着您还需要为自己的软件制作相同数量的版本。

这并不像您想象的那么难维护。拥有多个活动的 git 分支并不难,适用于每个“目标”的任何更改都可以合并或挑选。

【讨论】:

  • 你也许可以解决这个问题,但我认为这是解决这个问题的有效解决方案,我认为开发人员处理支持多个版本的一种非常常见的方式。 Composer 实际上足够聪明,可以根据用户安装的版本选择正确的您的包版本。
  • 我同意。如果没有别的,我会走这条路,否则我的产品不能工作,所以,我当然必须,但只是问有没有更好的解决方案。我想以正确的方式做事。
  • 我维护了几个 PHP 包,每个包都针对最大的 PHP 版本(我相信是 5.2、5.4 和 7)。这并不难,这是一个类似的问题。如果您的主分支既是最先进的包,又是最先进的依赖项,那也很好。我会专注于维护多个版本的感知摩擦,看看你是否可以消除这种摩擦。
  • 您可以链接一些代码或编辑您的答案吗?只是想看看是否有一些不错的方法来做到这一点。我对我的软件质量非常满意。如果没有其他选择,到处乱砍以完成工作不会杀死任何人。
  • 这是我的一个包的示例,它有一个 PHP 5 版本和一个 PHP 7 版本:packagist.org/packages/sabre/uri
猜你喜欢
  • 1970-01-01
  • 2020-05-19
  • 1970-01-01
  • 2014-08-16
  • 1970-01-01
  • 1970-01-01
  • 2019-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多