在php手册中间搜索insteadof是没有结果的。
insteadof主要是用来解决在同一个类中同时使用多个trait,然而在使用的这些trait中方法名称冲突的问题。
借用别人的例子:
<?php
class Base
{
public function hello()
{
echo 'method hello from class Base' . '<br>';
}
}
trait Hello
{
public function hello()
{
echo 'method hello from Trait Hello' . '<br>';
}
public function hi()
{
echo 'method hi from Trait Hello' . '<br>';
}
abstract public function getValue();
static public function staticMethod()
{
echo 'static method staticMechod from Trait Hello' . '<br>';
}
public function staticValue()
{
static $value;
$value++;
echo $value . '<br>';
}
}
trait Hi
{
public function hello()
{
parent::hello();
echo 'method hello from Trait Hi' . '<br>';
}
public function hi()
{
echo 'method hi from Trait Hi' . '<br>';
}
}
trait HelloHi
{
use Hello, Hi{
Hello::hello insteadof Hi;
Hi::hi insteadof Hello;
}
}
class MyNew extends Base
{
use HelloHi;
private $value = 'class MyNew' . '<br>';
public function hi()
{
echo 'method hi from class MyNew' . '<br>';
}
public function getValue()
{
retturn $this->value;
}
}
$obj = new MyNew();
$obj->hello();
//输出:'method hello from Trait Hello'
//优先级顺序:trait类中的方法覆盖了base中的方法,然后通过insteadof 指定了Hello中的hello方法覆盖了Hi中的hello方法