judahnator / boots-traits
一个用于将启动/初始化功能添加到PHP特质的包
v2.0.2
2019-02-01 15:43 UTC
Requires
- php: >=7.1
- judahnator/trait-aware: ^1.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.13
- phpstan/phpstan: ^0.10.5
- phpunit/phpunit: ^7.4
README
这是一个受Laravel框架极大启发的非常直观的库。这个库允许您以可理解且可预测的方式对任何给定类上的特质进行“启动”和“初始化”。
安装
您可以通过composer安装此库,就像安装其他任何东西一样。
composer require judahnator/boots-traits
使用
启动
在这个上下文中,“启动”一个特质涉及到调用其中的一个静态方法。这通常用于注册功能或为未来的使用设置类。
为了使用此功能,您需要在您的类中“使用”\judahnator\BootsTraits\BootsTraits
特质,并调用其静态的bootTraits()
方法。
要编写一个“启动”的特质,只需写一个以“boot”为前缀,然后是您的特质基本名称的静态方法。例如,如果您的特质名称是“MyAwesomeTrait”,则您的启动方法将被命名为“bootMyAwesomeTrait”。
初始化
“初始化”一个特质是在您的特质上调用一个特殊的不为静态的方法。这是您可以执行需要类已经启动并且所有服务都已注册的设置操作的地点。
为了使用此功能,您需要在您的类中“使用”\judahnator\BootsTraits\InitializesTraits
特质,并调用其initializeTraits()
方法。
要编写一个“初始化”的特质,只需编写一个以“initialize”为前缀,然后是您的特质基本名称的方法。如果您的特质名称是“MyAwesomeTrait”,则您的初始化方法将被命名为“initializeMyAwesomeTrait”。
示例
<?php
use judahnator\BootsTraits\{BootsTraits, InitializesTraits};
// Example booted trait
trait MyBootedTrait
{
protected static function bootMyBootedTrait(): void
{
echo "Booting ".__TRAIT__.PHP_EOL;
}
}
// Example initialized trait
trait MyInitializedTrait
{
protected function initializeMyInitializedTrait(): void
{
echo __TRAIT__." has been initialized".PHP_EOL;
}
}
// Why not both initialize and boot a trait?
trait MyBootedAndInitializedTrait
{
protected static function bootMyBootedAndInitializedTrait(): void
{
echo "Booting ".__TRAIT__.PHP_EOL;
}
protected function initializeMyBootedAndInitializedTrait(): void
{
echo __TRAIT__." has been initialized".PHP_EOL;
}
}
// To create a class that boots
class MyClassThatBoots
{
use
BootsTraits, // use this to enable booting
MyBootedTrait; // add your 'bootable' traits
public function __construct()
{
// You can call this from wherever
// I just find the constructor handy
static::bootTraits();
}
}
// To create a class that initializes
class MyClassThatInitializes
{
use
InitializesTraits, // use this to enable initialization
MyInitializedTrait; // add your 'initializable' traits
}
// You can call the 'initializeTraits()' method from anywhere
(new MyClassThatInitializes())->initializeTraits();
// An example of a class that does both
class MyClassThatBootsAndInitializes
{
use
BootsTraits,
InitializesTraits,
MyBootedTrait,
MyInitializedTrait,
MyBootedAndInitializedTrait;
public function __construct()
{
// Boot your class
static::bootTraits();
// Booting MyBootedTrait
// Booting MyBootedAndInitializedTrait
// Initialize your class
$this->initializeTraits();
// MyInitializedTrait has been initialized
// MyBootedAndInitializedTrait has been initialized
}
}