自PHP5.4.0起,PHP实现了一种代码复用的方法,称为trait。为了实际使用trait,trait和class指定类名一样,首先需要指定trait名称,在定义的trait模块中,可以定义方法,下面我们就来看看本篇文章的详细内容。
创建trait所需的任务是就是上面的“确定trait名称”“定义所需方法”。
我们来看一下trait的使用方法
1.trait的定义
trait 特征名{ function 方法名1() { } function 方法名2() { } }
2.trait的使用
class 类名 { // 这使得类与定义方法1和方法2的状态相同 use trait名; }
3.具体的示例
在下面的代码中,我们准备了这个book类和pen类,并且在这两个类中都有一个计算价格的过程,包括共同的税,所以我们用trait定义了这个过程。
我认为可以通过简单地编写“use TaxCalculator;”来说明可以使用含税计算功能。
如果在book类/ pen类中定义了此值,则要写入的代码量会增加,并且在进行更正时必须修改这两个类。
使用trait会减少代码量,即使发生修复,可维护性也很高,因为它只需要修复TaxCalculator。
// 税的计算处理 trait TaxCalculator { private $price; // 价格 private $tax = 0.08; // 税收 // 返还含税的价格 public function taxIncluded() { return $this->price * (1 + $this->tax); } } // 表示book类的信息 class Book { use TaxCalculator; public $title; // 标题 public $author; // 作者 public function __construct($price, $title, $author) { $this->price = $price; $this->title = $title; $this->author = $author; } } // 表示pen类的信息 class Pen { use TaxCalculator; public $color; // 颜色 public $type; // 自动笔或者铅笔 public function __construct($price, $color, $type) { $this->price = $price; $this->color = $color; $this->type = $type; } } // 把书和笔实例化 $book = new Book(80, ""红楼梦"", ""曹雪芹""); $pen = new Pen(10, ""black"", ""sharp""); // 输出含税的价格 echo $book->taxIncluded().PHP_EOL; // 324 echo $pen->taxIncluded().PHP_EOL; // 108
微信扫码查看本文
发表评论