现代PHP二(性状trait)

短命女 2022-05-28 22:56 236阅读 0赞

1. 性状的定义

性状是类的部分实现,可以实现类的部分常量、属性和方法。

2. 为什么要使用性状

我们知道PHP大部分类的共性一般是使用类的继承来实现的,这样所有的子类都可以使用父类提供继承
的方法和属性,但是,很多时候,我们会觉得继承的耦合性太强,有时候两个完全不相干的实物,也会有
共同的属性和方法,比如计算机(AI)和人,都会思考和学习,但是他们是两个完全不同的物种,我们
只需要用到他们学习的方法和属性,如果两个继承自同一个类,那么我们如何写这个类呢?
这时候性状trait 就派上用场了,我们将各自公用的属性和方法独立出来,形成性状trait,在他们
需要的时候引入即可,可以提高代码的复用性。

3. 性状的使用

(0)使用条件

PHP version >= 5.4

(1)性状的声明

性状以 trait 关键字进行声明,编写规则则和类完全一样

  1. <?php
  2. trait StudyTrait{
  3. /** @var think */
  4. public $think;
  5. public function study(){
  6. echo 'learning';
  7. }
  8. }

(2)性状的使用

性状的使用和命名空间有些类似,都是使用 use关键字,但是性状的使用语句在class 类里面

  1. <?php
  2. class People{
  3. use StudyTrait;
  4. public function getStudy(){
  5. $this->study();
  6. }
  7. }

性状的使用如果出现相同的方法,优先级依次是
当前类 > trait > 父类
详情可参照: 性状详解

(3)性状方法冲突的解决

当多个性状被同一个类使用的时候,如果出现同名或者同类型方法,可以使用
关键字 inseadof 替代某些方法
关键字 as 给同名方法起别名

  1. Class C {
  2. use A, B {
  3. C::c1 insteadof A; //当前类中 同名方法用c1 替换掉 A中的c1
  4. B::b1 insteadof C; //B中 同名方法用b1 替换掉 C中的b1
  5. A::b2 as a2; //给同名的b2 起个别名 a2
  6. }
  7. }

发表评论

表情:
评论列表 (有 0 条评论,236人围观)

还没有评论,来说两句吧...

相关阅读

    相关 phpTraits 详解

    PHP是单继承的语言,在PHP 5.4 Traits出现之前,PHP的类无法同时从两个基类继承属性或方法。php的Traits和Go语言的组合功能有点类似, 通过在类中使用u

    相关 PHPTrait 特性

    Trait是在PHP5.4中加入的,它既不是接口也不是类。主要是为了解决单继承语言的限制。是PHP多重继承的一种解决方案。例如,需要同时继承两个 Abstract Class,

    相关 PHPTrait详解

    > php从以前到现在一直都是单继承的语言,无法同时从两个基类中继承属性和方法,为了解决这个问题,php出了Trait这个特性 用法:通过在类中使用use 关键字,声明要组合

    相关 PHP Trait 使用指南(life)

    通过更好地组织代码和代码复用来最大程度地减少代码重复是面向对象编程的重要目标。但是在 PHP 中,由于使用单一继承模型的局限性,有些时候要做到这些可能会比较困难。您可能有一些要

    相关 PHPTrait详解

    > php从以前到现在一直都是单继承的语言,无法同时从两个基类中继承属性和方法,为了解决这个问题,php出了Trait这个特性 用法:通过在类中使用use 关键字,声明要组合

    相关 php性状

    性状 形状是类的部分实现(即常量、属性、方法),可以混入一个或多个现有的php类中,性状有两个作用:表明类是作什么用的(像是接口);提供模块化实现(像是类)。 如何创