【问题标题】:PHP Traits: How to resolve a property name conflict?PHP Traits:如何解决属性名称冲突?
【发布时间】:2017-05-31 11:14:26
【问题描述】:

当一个类使用两个具有同名属性的 Traits 时,如何解决属性名称冲突?

例子:

<?php

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


trait Audio {

    public $name = 'a';
}


class Media {
    use Audio, Video;
}

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

我试过代替 (Video::name insteadof Audio) 和 (Video::name as name2) 没有成功。

提前致谢!

【问题讨论】:

    标签: php oop traits


    【解决方案1】:

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

    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'
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2012-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      相关资源
      最近更新 更多