zoukankan      html  css  js  c++  java
  • PHP Traits

    一、Traits简单介绍

    在计算机编程中,Traits是面向对象编程中使用的一种概念,它表示一组可用于扩展类功能的方法。

    二、Traits特点

    Traits提供了一组实现行为的方法,并要求类实现一组参数化所提供行为的方法。
    对于对象间的通信(以及对象之间的共享),特性在面向对象的协议(接口)和mixin之间有所不同。界面可以通过方法签名来定义一个或多个行为,而特征通过完整的方法定义来定义行为:即,它包括方法的主体。相比之下,mixin包含完整的方法定义,并且还可以通过成员变量携带状态,而特征通常不会。
    因此,被定义为特征的对象被创建为方法的组合,其可以被其他类使用而不需要多重继承。在命名冲突的情况下,当一个类所使用的多个特征具有同名的方法时,程序员必须明确地消除这些方法中将使用哪一种方法;从而手动解决多重继承的钻石问题。这与面向对象编程中的其他构成方法不同,在这种方法中,冲突的名称可以通过范围规则自动解决。
    尽管mixin只能使用继承操作构成,但特征提供了更广泛的操作选择,包括:
    对称和:合并两个不相交特征以创建新特征的操作;
    重写(或不对称总和):通过向现有特征添加方法形成新特征的操作,可能会覆盖其某些方法;
    别名:通过为现有方法添加新名称来创建新特征的操作;
    排除:通过从现有特征中移除方法形成新特征的操作。 (将它与别名操作组合会产生浅层重命名操作)。
    特质的构成方式如下:
    性状组成是可交换的;添加特征的顺序并不重要。例如,给定性状S = A + B,则性状T = B + A与S相同。
      冲突的方法被排除在组合物之外。
    嵌套性状相当于扁平化特征;构图层次不影响特征行为。例如,给定性状S = A + X,其中X = B + C,则性状T = A + B + C与S相同
    三、代码示例
    允许模拟多重继承的方面:
    trait TBounding{ 
       public $x, $y, $width, $height;
    }
    trait TMoveable{
        public function moveTo($x, $y)    {  
          // …    }}trait TResizeable{   
     public function resize($newWidth, $newHeight)    {  
          // …    }}class Rectangle{  
      use TBounding, TMoveable, TResizeable; 
       public function fillColor($color)    {  
          // …    }}
  • 相关阅读:
    脚本 var 元素,集,方法
    Android——SharedPreferences存储(作业)
    Android——ListView相关作业(修改版)
    Android——AutoCompleteTextView、Spinner和消息提示
    Android——GridView(显示文字)
    Android——GridView
    Android——BaseAdapter相关
    Android——模拟文件拷贝
    Android——计算器
    Android——ListView
  • 原文地址:https://www.cnblogs.com/sccwxl/p/9776528.html
Copyright © 2011-2022 走看看