Trait是为类似PHP的单继承语言而准备的一种代码复用机制.
Trait为了减少单继承语言的限制,使开发人员能够自由的在不同层次结构内独立的类中复用method

index.php

<?php


spl_autoload_register(function($className){

	$file='./'.$className.'.php';

	if(!file_exists($file)){
		throw new Exception("Class not found!");
	}

	require_once $file;

});



$car=new Car();
$car->test();
$car->Gps();

echo '<br/>';

$mobile=new Mobile();
$mobile->test();
$mobile->Gps();		


?>

Gps.php

<?php


Trait Gps
{

	public function gps(){
		echo 'gps';
	}
}









?>

  Mobile.php

<?php


	class Mobile
	{

		use Gps;

		public function test(){
			echo 'Mobile';
		}
	}

?>

  Car.php

<?php

class Car
{

	use Gps;
	
	public function test()
	{
		echo 'Car';
	}	

}

?>

 

引用多个Trait的时候如果不同的Trait中方法同名,会发生冲突:  Trait method Gps has not been applied, because there are collisions with other trait methods on Car in E:\wamp\www\Test\Car.php on line 13. 

解决冲突的方法需要使用:insteadof

<?php

class Car
{

    use Gps,GpsChina{
        GpsChina::Gps insteadof Gps; //代表使用GpsChina下的Gps方法,而不是使用原来的Gps方法
    }
    
    public function test()
    {
        echo 'Car';
    }    

}

?>

优先级为:继承类的方法<Trait的方法<类中的方法