php用户注册重复_如何在PHP框架里把Traits使用起来

30498f1cda2119c046adb09a5d4ef476.gif

文章来自:php自学中心网站
链接:http://www.startphp.cn/front/php/121156.html
作者:磊丰

商务合作:请加微信(QQ):2230304070

eca6873c0e04aa0f3c6cda959e402104.png

文章正文

c4a229968e708462ae3c2b2bcad3029f.png

我们都知道PHP只能使用单一继承,这意味着一个类只能从另一个类继承。 例如,您可能想从几个不同的类继承方法以防止代码重复。   PHP 5.4中添加了新的语言特性Traits,而且它在Laravel框架中得到了广泛使用。 Traits 的定义

Trait是PHP等单一继承语言中的代码重用机制。  Trait的目的是减少单一继承语言的某些限制,并允许开发人员在不同类层次结构下的几个独立类中自由重用方法。

Trait的语义组成和类定义在某种程度上降低了代码的复杂性,并避免了与多重继承和Mixins相关的一些典型问题。

Trait与类非常相似,但其目的只是以更好和一致的方式聚合某些方法。 特性本身无法实例化。 除了传统的继承,它还可以水平组合行为,换句话说,类应用程序不需要继承

PHP Traits是什么? Trait 是另一个类中包含的一组简单方法。Trait 就像一个抽象类,不能单独实例化。一个Trait 示例如下所示:
trait SharePost {
 public function share($item){
  return 'share this post';
 }
}
然后,您可以在其他类中使用Trait,例如:
class Post {
use SharePost;
}
class Comment {
use SharePost;
}

现在,如果您想从这些类中创建新对象,您将发现它们都可以使用share()方法:

$post = new Post;
echo $post->share(''); // 'share this post'
$comment = new Comment;
echo $comment->share(''); // 'share this post'

Traits 如何工作 ?从上面的示例中可以看到,尽管Post和Comment本身没有定义方法,但是它们可以调用share()方法。 Trait 是一种在运行时“复制并粘贴”代码的方法。 这意味着将Trait复制到Post and Comment,因此在实例化新实例时,可以直接调用share()方法。 我定期检查我的代码以及如何构造新代码,以便在将来快速构建新功能并轻松启动新项目。

那么,怎样在laravel中使用traits呢?首先我在项目的 Http 目录下创建一个Traits文件夹,并且新建了一个名叫 ActivityCouponTrait.php 的Trait文件,写了一个新用户注册的trait;去寻找UserBaseService里的addUser方法。

/**
 * Function:新用户注册
 * Author:磊丰
 * @param $user_name
 * @return mixed
 */
public function addUserTrait($user_name,$dealer,$source){
      $service =  app(UserBaseService::class);
      return $service->addUser($user_name,$dealer,$source);
}

接下来找UserBaseService里的addUser方法。

/**
 * 新增用户
 * @param string $user_name 手机号
 * @param int $dealer_id
 */
public function addUser($user_name, $dealer_id = '111', $source = '后台'){
    $user            = new UserBaseModel;
    $user->user_name = $user_name;
    $user->zmq_no    = $this->zmq_no();
    $user->password  = md5(substr($user_name, -4));
    $user->source    = $source;
    $user->dealer_id = $dealer_id;
    $user->save();

    return $user;
}

这个时候我们就可以在controller里直接去调用了。首先要先引入上面的那个trait

use ActivityCouponTrait
然后就可以用了
/* Function:查找用户是否已经注册过
* Author:磊丰
* @param $mobile
* @return mixed
*/
public function addUser($mobile,$coupon){
$user = UserBaseModel::where('user_name',$mobile)->first();

//新用户领取
if(empty($user)){
    $source = '领取页';
    $user_new = $this->addUserTrait($mobile,'111',$source);   //用trait
    $res = $this->insertUserCoupon($user_new,$coupon);
}else{
    //用户注册过,查找一下是否领取过优惠券
    $userCoupon = $this->getUserCoupon($coupon,$user['user_id']);
    if($userCoupon != 1){
        $res = $this->insertUserCoupon($user,$coupon);
    }
}

return $res;
}

以上是文章全部内容,有需要学习与经验交流的友友或者进入微信交流群学习与交流的可以加小编为好友咱们一起学习,有问题一起交流,一起进步!前提是你是学技术的。

55a977e97f5c0e6a262abcc82aa762ec.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值