对象工具

来源:互联网 发布:中兴网络机顶盒怎么样? 编辑:程序博客网 时间:2024/05/21 21:45

在追踪Yii2源码的时候,发现了这个PHP新特性Traits,之前一直觉得PHP不能多重继承是很惆怅的事情,现在看来是自己孤陋寡闻了。好好研读了这个特性的使用,并做了实例,记录一下。 下面PHP手册里对该特性的描述:

自 PHP 5.4.0 起,PHP 实现了代码复用的一个方法,称为 traits。 
Traits 是一种为类似 PHP 的单继承语言而准备的代码复用机制。Trait 为了减少单继承语言的限制,使开发人员能够自由地在不同层次结构内独立的类中复用方法集。Traits 和类组合的语义是定义了一种方式来减少复杂性,避免传统多继承和混入类(Mixin)相关的典型问题。 
Trait 和一个类相似,但仅仅旨在用细粒度和一致的方式来组合功能。Trait 不能通过它自身来实例化。它为传统继承增加了水平特性的组合;也就是说,应用类的成员不需要继承。 
----PHP手册

百度了一下traits(又显得寡闻了);结果是:特性、显著特点。也就用traits定义的类,里面的方法都use它的类中特有的方法。

namespace common\service;/** * 删除的公共方法 * @author Jack     */trait DeleteService {    /**     * 通过主键删除     * @param int $id     * @return int | boolean     */    public static function deleteByPk( $id )    {        $model = static::find($id);        return $model->delete();    }    /**     * 批量删除     * @param string $condition     * @param array $params     */    public static function deleteAll( $condition = '', $params = [] )    {        return static::deleteAll( $condition = '', $params = [] );    }}

定义一个用户操作的类,此类须要实现IUser接口定义方法,默认继承User模型,有删除、更新的特性

<?phpnamespace common\service;use common\service\IUser;use common\service\DeleteService;use common\service\UpdateService;/** * @author Jack * from www.aipanshi.com */class UserService extends \models\User implements IUser{    use DeleteService, UpdateService;    }

index

0 0