在 PHP 中扩展 DateTime 和 DateTimeImmutable
Extend DateTime and DateTimeImmutable in PHP
我有一堆以各种方式操纵 DateTime
的小程序函数,我想到如果我扩展 DateTime
[=37= 可能更容易使用] 并将这些函数转换为 class.
的方法
好吧,很简单,我可以做到:
namespace My\Project;
class DateTime extends \DateTime {
... various new methods etc...
}
但是...我也使用 DateTimeImmutable
对象,并且还希望在 class 中添加这些内容。
有没有什么方法可以扩展 中的 class 以包含我的新功能 而无需重复代码 ? (是的,我知道我可以 copy/paste 将新方法转化为新的 classes。在这里尝试保持干爽。)
难道 PHP 没有办法将 "sideload" 编码成 class 吗?或扩展 DateTimeInterface
但还包含特定于 DateTime
和 DateTimeImmutable
的代码的方法?
像这样扩展常见的 classes 是不好的做法吗? (它会在路上咬我的屁股吗?)
只需创建两个 类,每个都扩展 DateTime
或 DateTimeImmutable
,以及一个具有所有 "new methods, etc" 的特征,您可以 use
直接在他们两个。
trait Convenient {
public function echo() : void {
echo "bar\n";
}
}
class A extends \DateTime {
use Convenient;
}
class B extends \DateTimeImmutable {
use Convenient;
}
关于"best practice",见仁见智;但很难想象有人会反对扩展 base 类。出于很多正当理由,它一直在完成。理想情况下,客户端脚本应该以接口为目标,而不是 类。
有几个广为人知且广泛使用的库,例如 Carbon or Chronos,它们扩展了基本日期时间对象。在重新发明它们之前,您可能想检查一下。
我有一堆以各种方式操纵 DateTime
的小程序函数,我想到如果我扩展 DateTime
[=37= 可能更容易使用] 并将这些函数转换为 class.
好吧,很简单,我可以做到:
namespace My\Project;
class DateTime extends \DateTime {
... various new methods etc...
}
但是...我也使用 DateTimeImmutable
对象,并且还希望在 class 中添加这些内容。
有没有什么方法可以扩展 中的 class 以包含我的新功能 而无需重复代码 ? (是的,我知道我可以 copy/paste 将新方法转化为新的 classes。在这里尝试保持干爽。)
难道 PHP 没有办法将 "sideload" 编码成 class 吗?或扩展 DateTimeInterface
但还包含特定于 DateTime
和 DateTimeImmutable
的代码的方法?
像这样扩展常见的 classes 是不好的做法吗? (它会在路上咬我的屁股吗?)
只需创建两个 类,每个都扩展 DateTime
或 DateTimeImmutable
,以及一个具有所有 "new methods, etc" 的特征,您可以 use
直接在他们两个。
trait Convenient {
public function echo() : void {
echo "bar\n";
}
}
class A extends \DateTime {
use Convenient;
}
class B extends \DateTimeImmutable {
use Convenient;
}
关于"best practice",见仁见智;但很难想象有人会反对扩展 base 类。出于很多正当理由,它一直在完成。理想情况下,客户端脚本应该以接口为目标,而不是 类。
有几个广为人知且广泛使用的库,例如 Carbon or Chronos,它们扩展了基本日期时间对象。在重新发明它们之前,您可能想检查一下。