Insteadof 和 as 这两个关键字了.请看如下实现代码:
<?php
trait Log
{
public function parameterCheck($parameters)
{
echo __METHOD__ . ' parameter check' . $parameters . PHP_EOL;
}
public function startLog()
{
echo __METHOD__ . ' public function' . PHP_EOL;
}
}
trait Check
{
public function parameterCheck($parameters)
{
echo __METHOD__ . ' parameter check' . $parameters . PHP_EOL;
}
public function startLog()
{
echo __METHOD__ . ' public function' . PHP_EOL;
}
}
class Publish
{
use Check, Log {
Check::parameterCheck insteadof Log;
Log::startLog insteadof Check;
Check::startLog as csl;
}
public function doPublish()
{
$this->startLog();
$this->parameterCheck('params');
$this->csl();
}
}
$publish = new Publish();
$publish->doPublish();
执行上述代码,输出结果如下:
Log::startLog public function Check::parameterCheck parameter checkparams Check::startLog public function
就如字面意思一般,insteadof关键字用前者取代了后者,as 关键字给被取代的方法起了一个别名。
在引用Trait时,使用了use关键字,use关键字也用来引用命名空间。两者的区别在于,引用Trait时是在class内部使用的。







