在之前版本的PHP当中,当我们要使用继承的时候通常都是 extends ,虽然能解决继承的问题,但是始终是单继承。
下面我们来看看新特性- Trait 带来的新思路。
如何使用
<?php
trait A
{
public $a='a';
private $aa='aa';
public function getA()
{
echo 'function-a'.PHP_EOL;
}
}
trait B
{
public function pr()
{
echo 'print!';
}
}
class test
{
use A,B;
public function test_trait()
{
echo $this->a.PHP_EOL;
}
}
$test=new test();
$test->test_trait();
结果是打印 a
如何理解这个特性
个人理解为复制,可以把上文中的A和B 理解为待继承的类,使用use 等同于将被继承的对象内容全部复制到继承处,可以用来实现多继承的特性。
下面多测试一些情况
· 具备相同的属性值 :程序报错。
· 具备相同的方法 :程序报错。
· 当extends继承包含相同方法的时候 : 优先级:自身方法>trait的方法>继承的方法
当使用trait 类被继承是否具备trait的内容
<?php
trait A
{
public $a='a';
private $aa='aa';
public function pr1()
{
echo 'function-a'.PHP_EOL;
}
}
trait B
{
public function pr()
{
echo 'print!';
}
}
class test2
{
}
class test extends test2
{
use A,B;
public function test_trait()
{
echo $this->a.PHP_EOL;
}
}
class te extends test
{
public function say()
{
}
}
$test=new te();
$test->a;
以上代码 打印出空白。可见继承含trait 的类 并不具备trait的内容