微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP:类的特征和其他特征冲突

我的PHP特性有问题.
我想在一个类中以及在该类中使用的一个特征中使用一个特征.

例:

trait Loggable {
  protected function log(msg) { 
    echo msg; 
  }
}

trait SomeOtherTrait {
  use Loggable;
}

class MyClass {
  use SomeOtherTrait, Loggable;
}

但这会导致冲突,因为Loggable在类中使用了两次(一次在类中,通过其他特征一次),但是我不明白这个问题,因为封装功能就是所有特征的全部,对不对?
所以我只想在包含Loggable特征的任何地方使用log方法

所以问题是:为什么会发生碰撞?两者(特征和类)都指向相同的特性和方法,因此不应有冲突.

解决方法:

SomeOtherTrait使用Loggable特性,因此您可以访问Loggable的所有受保护成员和公共成员,并且对使用SomeOtherTrait的所有类也是如此.在这里,您可以访问Loggable和SomeOtherTrait的所有公共成员和受保护成员.

trait Loggable {
   protected function log($msg) { 
      echo $msg; 
   }
}

trait SomeOtherTrait {
   use Loggable;
}

class MyClass {
   use SomeOtherTrait;

   public function test() 
   { 
       $this->log("test");
   }
}

$myClass = new MyClass();

$myClass->test();

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐