traits

在傳統(tǒng)上,面向?qū)ο蟮木幊袒陬惡蛯?duì)象的概念,這些類和對(duì)象繼承自其他類和對(duì)象。您可以從一個(gè)抽象概念開(kāi)始了解這些,然后逐漸了解具有子類的次級(jí)類,獲得更具體的細(xì)節(jié)。如果您需要在對(duì)象之間使用一個(gè)一致的 API,那么您還應(yīng)該了解接口的概念;在那里,您可以定義對(duì)象需要實(shí)現(xiàn)的方法。但是,如果不僅想要聲明 哪些方法必須存在,還想在同一時(shí)間提供自己的實(shí)現(xiàn),該怎么做?讓我們來(lái)了解一下特征(traits)。
特征(PHP 5.4 中添加的特性)是一個(gè)適用于水平代碼重用(而繼承是垂直代碼重用)的工具。在其他語(yǔ)言中,該特性有時(shí)被稱為混合(mixin)。這個(gè)概念在兩種情況下都很簡(jiǎn)單。特征或混合是開(kāi)發(fā)任意數(shù)量的方法的一種方式。也許您有一些常用方法來(lái)過(guò)濾和操作一些對(duì)象將會(huì)分享的數(shù)據(jù)或業(yè)務(wù)邏輯。您可以將它們保存在一個(gè)特征中,然后在您可能希望使用的任何類中重用它們。
下面顯示了一個(gè)簡(jiǎn)化的示例,該示例提供了一個(gè)日志記錄方法,任何類都可以使用該方法作為記錄事件的統(tǒng)一方法

<?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]);
 }
 }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,516評(píng)論 19 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,825評(píng)論 25 709
  • 這樣挺好的 寫(xiě)一手漂亮的字,讀很多的書(shū),有一顆詩(shī)心,學(xué)一些心理 每天堅(jiān)持在熟悉的路上感受肌肉發(fā)力 感受揮汗如雨 作...
    臨易閱讀 212評(píng)論 0 0
  • 隨著年齡的增大,父親地里的農(nóng)活也越來(lái)越干不大了了。一親戚便說(shuō),地閑著,不種怪可惜的,我們一起種點(diǎn)吧,自己吃...
    蜜蜂郎馬成欣閱讀 310評(píng)論 0 4
  • 西環(huán)上大堤的老路正在翻修,泥土被壓路機(jī)壓過(guò)后,寬廣而平整。坐在半坡上,涼風(fēng)習(xí)習(xí),綠色田野的盡頭,是穿行在黃昏暮...
    遠(yuǎn)山笑我閱讀 235評(píng)論 0 1

友情鏈接更多精彩內(nèi)容