traits

在传统上,面向对象的编程基于类和对象的概念,这些类和对象继承自其他类和对象。您可以从一个抽象概念开始了解这些,然后逐渐了解具有子类的次级类,获得更具体的细节。如果您需要在对象之间使用一个一致的 API,那么您还应该了解接口的概念;在那里,您可以定义对象需要实现的方法。但是,如果不仅想要声明 哪些方法必须存在,还想在同一时间提供自己的实现,该怎么做?让我们来了解一下特征(traits)。
特征(PHP 5.4 中添加的特性)是一个适用于水平代码重用(而继承是垂直代码重用)的工具。在其他语言中,该特性有时被称为混合(mixin)。这个概念在两种情况下都很简单。特征或混合是开发任意数量的方法的一种方式。也许您有一些常用方法来过滤和操作一些对象将会分享的数据或业务逻辑。您可以将它们保存在一个特征中,然后在您可能希望使用的任何类中重用它们。
下面显示了一个简化的示例,该示例提供了一个日志记录方法,任何类都可以使用该方法作为记录事件的统一方法

<?php
trait logging {
private static $LOG_ERROR = 100;
private static $LOG_WARNING = 50;
private static $LOG_NOTICE = 10; 
protected $log_location = 'output.log'; 
protected function log($level, $msg) {

  $output = [];
  $output[] = "Class: ".__CLASS__.' | ';
  $output[] = "Level: {$level} | ";
  $output = array_merge($output, (array)$msg, ["\n"]);
  file_put_contents($this->log_location, $output, FILE_APPEND);
 }
}

class User {
use logging;

 public function __construct() {
 $this->log(self::$LOG_NOTICE, 'New User Created');
 }
}

class DB {
use logging;

private $db = 'localhost:8080';

public function connect() {
  // ... attempt to connect and fail:
  $this->log(self::$LOG_ERROR, ['Connection Failed-', $this->db]);
 }
 }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,124评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,342评论 25 709
  • 这样挺好的 写一手漂亮的字,读很多的书,有一颗诗心,学一些心理 每天坚持在熟悉的路上感受肌肉发力 感受挥汗如雨 作...
    临易阅读 1,445评论 0 0
  • 随着年龄的增大,父亲地里的农活也越来越干不大了了。一亲戚便说,地闲着,不种怪可惜的,我们一起种点吧,自己吃...
    蜜蜂郎马成欣阅读 2,087评论 0 4
  • 西环上大堤的老路正在翻修,泥土被压路机压过后,宽广而平整。坐在半坡上,凉风习习,绿色田野的尽头,是穿行在黄昏暮...
    远山笑我阅读 1,603评论 0 1

友情链接更多精彩内容