2017-01-16 62 views
2

如何解决属性名称冲突当一个类使用两个traits 同名属性PHP特质:如何解决属性名称冲突?

例子:

<?php 

trait Video { 
    public $name = 'v'; 
} 


trait Audio { 

    public $name = 'a'; 
} 


class Media { 
    use Audio, Video; 
} 

$media = new Media(); 
$media->name; 

我试图与其使用(视频::名称与其使用音频),并没有成功(视频::名名2)。

在此先感谢!

回答

3

你不能,它的方法只。
但是,只有当值相同时,它们才可以使用相同的属性名称:

trait Video { 
    public $name; 
    function getName(){ 
    return 'Video'; 
    } 
} 
trait Audio { 
    public $name; 
    function getName(){ 
    return 'Audio'; 
    } 
} 
class Media { 
    use Audio, Video { 
    Video::getName insteadof Audio; 
    } 

    function __construct(){ 
    $this->name = $this->getName(); // 'Video' 
    } 
}