dobrosite/time-service 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

dobrosite/time-service

最新稳定版本:1.0.0

Composer 安装命令:

composer require dobrosite/time-service

包简介

Служба времени для PHP

README 文档

README

Предоставляет интерфейс и простую реализацию службы для получения текущего времени и часового пояса.

Чем плох распространённый подход с определением текущего времени с помощью new DateTimeImmutable(), date_create() и т. п.?

  1. Вы полагаетесь глобальное состояние, которое не контролируете. Достаточно какой-нибудь, используемой вами сторонней библиотеке изменить часовой пояс, и приведённые выше конструкции начнут возвращать время в другом часовом поясе. И это может происходить только при определённых условиях, что крайне трудно выявить при отладке.
  2. Такой код сложно тестировать. Сравнение фактического и реального времени в тестах превращается в лотерею с заданием допусков промежутков времени. Либо вообще происходит отказ от проверки времени в тестах.

Одно из возможных решений — служба времени, к которой обращается ваш код, чтобы узнать текущее время. Пример:

<?php
use DobroSite\TimeService\TimeService;

class SomeService {
  private TimeService $timeService;
  
  // Внедряем в ваш класс службу времени в качестве зависимости.
  public function __construct(TimeService $timeService)
  {
    $this->timeService = $timeService;
  }
  
  public function someMethod(): void
  {
    // Когда вам потребуется текущее время, обратитесь к службе времени:
    $currentTime = $this->timeService->getCurrentTime();
  }
}
  1. Вы получаете полный контроль над временем в вашем приложении. Используя разные реализации интерфейса TimeService вы можете получать время из разных источников: системное время, сервер NTP и т. п. Так же вы можете задать в конфигурации нужный часовой пояс, который не может быть изменён без вашего ведома сторонним кодом.
  2. Вы можете подменять в тестах службу времени тестовым двойником, чтобы тестируемый код получал заранее предопределённое время.
  3. Написав свою реализацию, вы можете заставить ваше приложение перемещаться в будущее или прошлое, задавая нужное смещение относительно текущего времени. Это может быть полезно в приёмочном тестировании для проверки функций, которые должны выполниться через какой-то промежуток после некоторого действия.

Установка

composer require dobrosite/time-service

Использование

TimeService

Используйте интерфейс TimeService в качестве зависимости в классах, которым требуется получать текущее время.

Вы можете написать свою реализацию этого интерфейса, либо воспользоваться готовыми реализациями:

  • PhpTimeService — использует встроенные средства PHP.

Тестирование

TestTimeService

Тестовый двойник TimeService всегда возвращающий заданное время. Задать нужное время можно методом TestTimeService::setCurrentTime().

统计信息

  • 总下载量: 7.13k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2022-07-21

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固