对象工具 - PHP新特性Traits

在追踪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模型,有删除、更新的特性

<?php
namespace 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值