gpt4 book ai didi

php - 在 PHP 中用类扩展特征?

转载 作者:IT王子 更新时间:2023-10-29 01:15:43 27 4
gpt4 key购买 nike

为什么我们不允许在 PHP 中使用类扩展特征?

例如:

Trait T { }

Class C use T {}
/* or */
Class C extends T {}

这种语法是否存在潜在的冲突?我不这么认为。

最佳答案

PHP 手册是这样说的:

Traits is a mechanism for code reuse in single inheritance languages such as PHP. A Trait is intended to reduce some limitations of single inheritance by enabling a developer to reuse sets of methods freely in several independent classes living in different class hierarchies. The semantics of the combination of Traits and classes is defined in a way which reduces complexity, and avoids the typical problems associated with multiple inheritance and Mixins.

如果您希望扩展一个特征,那么它可能应该是一个类。如果您想在一个类中使用一组方法并希望在其他类中使用,但感觉不适合扩展该类(例如 class Animal extends Vehicle),那么在 PHP 5.4 中它可以正常工作作为一种特质。

要更直接地回答这个问题,您不会“扩展”特征,但您可以创建自身使用其他特征的特征。根据 PHP 手册:

trait Hello {
public function sayHello() {
echo 'Hello ';
}
}

trait World {
public function sayWorld() {
echo 'World!';
}
}

trait HelloWorld {
use Hello, World;
}

class MyHelloWorld {
use HelloWorld;
}

您可以认为这是一种在逻辑组中维护您的特征并引入一些模块化的方法。

编辑:看过一些评论后,我认为值得注意的是,在基类中使用 trait 也意味着 trait 在任何扩展它的类中,并且 trait 的函数优先于基类。将它放在子类中只会使父/基类无法使用 trait 的功能。

Parent > Trait > Child

http://php.net/manual/en/language.oop5.traits.php

关于php - 在 PHP 中用类扩展特征?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10056520/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com