说通俗点,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();