自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
微信扫码查看本文
发表评论