phossa/phossa-shared

其他 phossa 包的共享包

1.0.11 2016-05-23 07:39 UTC

This package is not auto-updated.

Last update: 2024-09-11 23:18:48 UTC


README

Build Status HHVM Latest Stable Version License

简介

Phossa-shared 是其他 phossa 包所需的共享包。

安装

使用 composer 工具安装。

composer require "phossa/phossa-shared=1.*"

或在你的 composer.json 中添加以下行

{
    "require": {
       "phossa/phossa-shared": "^1.0.9"
    }
}

特性

  • 异常

    所有 phossa 异常都实现了 Phossa\Shared\Exception\ExceptionInterface。要扩展 phossa 异常,

    <?php
    namespace Phossa\Cache\Exception;
    
    class BadMethodCallException extends
        \Phossa\Shared\Exception\BadMethodCallException
    {
    }
  • 消息

    MessageAbstract 类是所有 phossa 包中所有 Message 类的基类。

    • 定义包相关的 Message

      Message 类用于将消息代码转换为可读消息,并且 必须 定义自己的属性 $messages

      <?php
      namespace Phossa\Cache\Message;
      
      use Phossa\Shared\Message\MessageAbstract;
      
      class Message extends MessageAbstract
      {
          // use current year_month_date_hour_minute
          const CACHE_MESSAGE     = 1512220901;
      
          // driver failed
          const CACHE_DRIVER_FAIL = 1512220902;
      
          protected static $messages = [
              self::CACHE_MESSAGE      => 'cache %s',
              self::CACHE_DRIVER_FAILT => 'cache driver %s failed',
          ];
      }
    • Message 类用法

      通常只使用 Message::get()Message::CONST_VALUE

      use Phossa\Cache\Message\Message;
      ...
      // throw exception
      throw new Exception\RuntimeException(
          Message::get(Message::CACHE_DRIVER_FAIL, get_class($driver)),
          Message::CACHE_DRIVER_FAIL
      );
    • 消息加载器

      用于加载不同的代码到消息映射,例如语言文件。

      namespace Phossa\Cache;
      
      use Phossa\Shared\Message\Loader\LanguageLoader;
      
      // set language to 'zh_CN'
      $langLoader = new LanguageLoader('zh_CN');
      
      // will load local `Message\Message.zh_CN.php` language file
      Message\Message::setLoader($langLoader);
      
      // print message in chinese
      echo Message\Message::get(
          Message::CACHE_MESSAGE, get_class($object)
      );
    • 消息格式化器

      用于对不同设备(如 HTML 页面)的消息进行格式化。

      namespace Phossa\Cache;
      
      use Phossa\Shared\Message\Formatter\HtmlFormatter;
      
      // format message as HTML
      $formatter = new HtmlFormatter();
      
      Message\Message::setFormatter($formatter);
      
      // print as HTML
      echo Message\Message::get(
          Message::CACHE_MESSAGE, get_class($object)
      );
  • 模式

    InterfaceTrait 中常用的模式

    • StaticTrait

      用于包含在一个不能扩展 StaticAbstract 的静态类中。

      <?php
      namespace Phossa\MyPackage;
      
      class MyStaticClass extends SomeClass
      {
          use \Phossa\Shared\Pattern\StaticTrait;
          ...
      }
    • StaticAbstract

      用于被其他类扩展。

      <?php
      namespace Phossa\MyPackage;
      
      class MyStaticClass extends \Phossa\Shared\Pattern\StaticAbstract
      {
          ...
      }
    • SingletonInterfaceSingletonTrait

      用于包含在单例类中。

      <?php
      namespace Phossa\MyPackage;
      
      class MySingletonClass extends SomeClass
      {
          use \Phossa\Shared\Pattern\SingletonTrait;
          ...
      }

      用法

      $obj =  MySingletonClass::getInstance();

      这个单例实现有一个特性,允许单例类进行扩展。

      <?php
      namespace Phossa\MyPackage;
      
      class MyNewSingletonClass extends MySingletonClass
      {
          ...
      }
    • ShareableInterfaceShareableTrait

      Shareable 允许多个实例,但只有一个全局副本。例如全局事件管理和许多本地事件管理器。

      <?php
      namespace Phossa\Event;
      
      use Phossa\Shared\Pattern\ShareableInterface;
      
      class EventManager implements ShareableInterface
      {
          use \Phossa\Shared\Pattern\ShareableTrait;
          ...
      }

      用法

      // global event manager instance
      $globalEM = EventManager::getShareable();
      
      // local event manager
      $localEM  = new EventManager();
      
      // this EM global ?
      if ($globalEM->isShareable()) {
          ...
      } else {
          ...
      }
  • 可标记的

    添加了 TaggableInterfaceTaggableTrait

  • 支持 PHP 5.4+、PHP 7.0+、HHVM

  • PHP7 已准备好用于返回类型声明和参数类型声明。

  • PSR-1、PSR-2、PSR-4 兼容。

  • 解耦的包可以在没有框架的情况下单独使用。

依赖

PHP >= 5.4.0

许可证

MIT 许可证