首先看代码:

class A
{

    use T {
        T::say as aTsay;
    }

    public function say()
    {
        echo 'a__class__:' . __CLASS__ . '<br>';
        echo 'a get_class:' . get_class() . '<br>';
        echo 'a get_class this:' . get_class($this) . '<br>';
        echo 'a get_called_class:' . get_called_class() . '<br><br>';
        static::aTsay();
        static::Tsay();
    }
}

class B extends A
{
    use T {
        T::say as Tsay;
    }

    public function say()
    {
        parent::say();
        echo 'b__class__:' . __CLASS__ . '<br>';
        echo 'b get_class:' . get_class() . '<br>';
        echo 'b get_class this:' . get_class($this) . '<br>';
        echo 'b get_called_class:' . get_called_class() . '<br><br>';

        static::Tsay();
    }
}

trait T
{
    public function say()
    {
        echo 't__class__:' . __CLASS__ . '<br>';
        echo 't get_class:' . get_class() . '<br>';
        echo 't get_class this:' . get_class($this) . '<br>';
        echo 't get_called_class:' . get_called_class() . '<br><br>';
    }
}

$b_say = new B();
$b_say->say();

输出结果:

a__class__:A
a get_class:A
a get_class this:B
a get_called_class:B

t__class__:A
t get_class:A
t get_class this:B
t get_called_class:B

t__class__:B
t get_class:B
t get_class this:B
t get_called_class:B

b__class__:B
b get_class:B
b get_class this:B
b get_called_class:B

t__class__:B
t get_class:B
t get_class this:B
t get_called_class:B

 

 

基本可以看出:

get_class是更灵活的应用,在没有输入参数的情况下,根__CLASS__是一样的,在输入this的情况下,根get_called_class 是一致的

 

版权声明:本文为yxzamy原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:http://www.cnblogs.com/yxzamy/p/7930200.html