说通俗点,PHP中使用trait关键字是为了解决一个类既想集成基类的属性和方法,又想拥有别的基类的方法,而trait一般情况下是和use搭配使用的。
<?php
trait Drive {
public $carName = 'trait';
public function driving() {
echo "driving {$this->carName}\n";
}
}
class Person {
public function eat() {
echo "eat\n";
}
}
class Student extends Person {
use Drive;
public function study() {
echo "study\n";
}
}
$student = new Student();
$student->study();
$student->eat();
$student->driving();
?>
又比如现在有 Publish.php 和 Answer.php 这两个类。要在其中添加 LOG 功能,记录类内部的动作。除了用 Publish extends log外(不好,因为Publish 和 LOG不是子类和父类关系),可以使用trait方法
<?php
trait Log{
public function startLog() {
// echo ..
}
public function endLog() {
// echo ..
}
}
// Publish.php
class Publish {
use Log;
}
$publish = new Publish();
$publish->startLog();
$publish->endLog();