本篇文章给大家带来了关于PHP的相关知识,主要介绍了为什么不能在PHP中使用泛型,下面将深入探讨泛型和PHP背后的情况,理解为什么泛型还不被支持作为一等公民,希望对大家有帮助。
推荐学习:《PHP教程》
为什么我们不能在 PHP 中使用泛型
我们将深入探讨泛型和 PHP 背后的情况。理解为什么泛型在 PHP 中还不被支持作为一等公民,这非常有趣,并且非常重要。
让我们看看吧。
PHP 中没有泛型。这就是去年的 Nikita 的结论。这根本不可行。
为了理解 Nikita 为什么这么说,我们需要看看如何实现泛型。一般来说,有三种可能的方法;支持泛型的编程语言大多使用这三种方法之一。
第一个称为 单态泛型。 让我们回到这个系列的第一篇文章,在这篇文章中我展示了这个集合示例:
class StringCollection extends Collection { public function offsetGet(mixed $key): string { /* … */ } } class UserCollection extends Collection { public function offsetGet(mixed $key): User { /* … */ } }
我解释了我们可以为需要的集合的每种类型,手动创建集合类的实现。 工作量将是巨大的,会有很多代码,但是它会起作用。
单态泛型正是这样做的,但在幕后自动实现。 在运行时,PHP 不会知道泛型 Collection 类,而是知道两个或多个特定实现:
$users = new Collection<User>(); // Collection_User $slugs = new Collection<string>(); // Collection_string
单态泛型是一种完全有效的方法。例如,Rust 就使用它们。 其一个优点是有一系列的性能提升,因为在运行时没有