Container
in package
implements
ContainerInterface
DI Container
Class Acms\Services\Container
Table of Contents
Interfaces
Properties
- $bootstrap : array<string, array<string|int, callable>>
- $aliases : array<string|int, mixed>
- $bindingListeners : array<int, callable(string): void>
- bind 変更(bind / singleton / instance / override / extend / forgetInstance)の通知リスナー。
- $extenders : array<string, array<int, Closure, priority: int, owner: string, seq: int}>>
- デコレーター登録。alias => 登録順の配列。
- $overrides : array<string, array{owner: string, priority: int}>
- 丸ごと差し替え(override)の勝者情報。競合検出・優先順位判定に使う。
- $resolvedInstance : array<string|int, mixed>
Methods
- __construct() : mixed
- Container constructor.
- aliasList() : array<string|int, mixed>
- DIコンテナに登録されている一覧を取得
- bind() : void
- register service
- bindMake() : mixed
- create service
- bootstrap() : mixed
- register service bootstrap function
- exists() : bool
- DIコンテナに登録されているか判定
- extend() : void
- デコレーション(既存実装をラップ)。
- forgetInstance() : void
- 既に make 済みの singleton インスタンスをキャッシュから破棄する。
- instance() : object
- 既存のオブジェクトをそのまま singleton として登録する。
- make() : mixed
- get service
- newInstance() : mixed
- create instance
- onBindingChanged() : void
- bind 変更(bind / singleton / instance / override / extend / forgetInstance)の通知リスナーを登録する。
- override() : void
- サービス丸ごと差し替え(再 bind の正式 API)。
- singleton() : void
- register service as singleton
- singletonMake() : mixed
- create service as singleton
- createInstance() : object
- インスタンスの生成
- isDebugMode() : bool
- DEBUG_MODE 定数はプロセス内で不変(PHP の define() は再定義不可)のため、 テストからデバッグ/本番の両分岐を切り替えられるようテスト用 seam として protected 化する。 サブクラスで override すれば固定値を返せる。
- assertExtendable() : void
- override() / extend() の共通前提条件を検査する。
- dropStaleBindingState() : void
- 定義を丸ごと上書きする bind() / singleton() の共通後始末。
- handleOverrideConflict() : void
- 同一 priority の override が競合した場合の処理。
- notifyBindingChanged() : void
- reportGovernanceViolation() : void
- デバッグモードでは LogicException を投げて即座に気付けるようにし、本番では警告ログを残して 呼び出し元に処理を継続させない(呼び出し元が return する)。override() の競合検出で使う エラー処理方針。
- sortedExtenders() : array<int, Closure, priority: int, owner: string, seq: int}>
- alias に登録済みの extend() デコレーターを適用順(priority 降順・同 priority は登録順)に返す。
Properties
$bootstrap
protected
array<string, array<string|int, callable>>
$bootstrap
$aliases
private
array<string|int, mixed>
$aliases
$bindingListeners
bind 変更(bind / singleton / instance / override / extend / forgetInstance)の通知リスナー。
private
array<int, callable(string): void>
$bindingListeners
= []
$extenders
デコレーター登録。alias => 登録順の配列。
private
array<string, array<int, Closure, priority: int, owner: string, seq: int}>>
$extenders
= []
$overrides
丸ごと差し替え(override)の勝者情報。競合検出・優先順位判定に使う。
private
array<string, array{owner: string, priority: int}>
$overrides
= []
$resolvedInstance
private
array<string|int, mixed>
$resolvedInstance
Methods
__construct()
Container constructor.
public
__construct() : mixed
aliasList()
DIコンテナに登録されている一覧を取得
public
aliasList() : array<string|int, mixed>
Return values
array<string|int, mixed>bind()
register service
public
bind(string $alias, string|callable $class[, array<string|int, mixed> $arguments = [] ]) : void
Laravel の Container::bind() と同様、再登録のたびに解決済みインスタンスのキャッシュ (resolvedInstance)を確実に破棄する。これにより次回の make() は必ず新しい定義から 生成される(Laravel の dropStaleInstances() 相当)。
Parameters
- $alias : string
- $class : string|callable
- $arguments : array<string|int, mixed> = []
bindMake()
create service
public
bindMake(string $alias) : mixed
Parameters
- $alias : string
bootstrap()
register service bootstrap function
public
bootstrap(string $alias, callable $callback) : mixed
Parameters
- $alias : string
- $callback : callable
exists()
DIコンテナに登録されているか判定
public
exists(string $alias) : bool
Parameters
- $alias : string
Return values
boolextend()
デコレーション(既存実装をラップ)。
public
extend(string $alias, callable(object $inner, Container $container): object $decorator, array{owner: string, priority?: int} $options) : void
積み重ね可能。適用順は priority 降順に内側(元実装に近い側)から。同 priority は 登録順(先に登録した方が内側)。
Parameters
- $alias : string
-
対象の登録済みエイリアス
- $decorator : callable(object $inner, Container $container): object
- $options : array{owner: string, priority?: int}
forgetInstance()
既に make 済みの singleton インスタンスをキャッシュから破棄する。
public
forgetInstance(string $alias) : void
テストで singleton() で stub クロージャに上書きした後、次回 make 時に
新しい closure が確実に呼ばれるようにキャッシュをクリアするのに使う。
通常の本番フローでは使わない。
Parameters
- $alias : string
instance()
既存のオブジェクトをそのまま singleton として登録する。
public
instance(string $alias, object $instance) : object
主な用途はテスト時のサービス差し替え。Laravel の Container::instance() 相当で、
内部では singleton() で alias を上書きするだけ。singleton() 自体が再登録のたびに
resolvedInstance キャッシュを破棄するため、次回の make($alias) は登録した
オブジェクトを必ず返す。
Why not extend() / override() の登録を保持する: singleton() を経由するため、
既存の extend() / override() 登録は他の再登録と同様に破棄される
(instance() は「丸ごとこのオブジェクトに差し替える」ためのテスト用ヘルパーであり、
Laravel の instance() も事前の extend() をその後の解決に適用しない点で結果的に同じ)。
使用例:
$stub = new MyServiceStub(); $container->instance('my.service', $stub); $resolved = $container->make('my.service'); // === $stub
Parameters
- $alias : string
-
上書きする DI コンテナエイリアス
- $instance : object
-
登録するオブジェクト
Return values
object —登録したオブジェクトをそのまま返す (流暢な書き方を許容するため)
make()
get service
public
make(string $alias) : mixed
Parameters
- $alias : string
Tags
newInstance()
create instance
public
newInstance(mixed $class[, array<string|int, mixed> $arguments = [] ]) : mixed
Parameters
- $class : mixed
- $arguments : array<string|int, mixed> = []
Tags
onBindingChanged()
bind 変更(bind / singleton / instance / override / extend / forgetInstance)の通知リスナーを登録する。
public
onBindingChanged(callable(string $alias): void $listener) : void
Facade 基底はこれを使い、コンテナの再 bind と同時に自身が保持する解決済みインスタンス キャッシュ(isCache() が true のファサードの static $instance)を自動破棄する。
Parameters
- $listener : callable(string $alias): void
override()
サービス丸ごと差し替え(再 bind の正式 API)。
public
override(string $alias, string|Closure $class, array{owner: string, priority?: int} $options) : void
override() / extend() は登録済みエイリアスのみ受け付ける。未登録エイリアスへの適用は タイポとみなしエラーとする。同一エイリアスへの override は priority が最大のものが 1 つ だけ勝ち、同 priority が複数登録された場合は競合として扱う。
Parameters
- $alias : string
-
差し替え対象の登録済みエイリアス
- $class : string|Closure
-
差し替え後のクラス名 or ファクトリクロージャ
- $options : array{owner: string, priority?: int}
-
owner は必須(プラグイン名等)
singleton()
register service as singleton
public
singleton(string $alias, string|callable $class[, array<string|int, mixed> $arguments = [] ]) : void
Laravel の Container::singleton() と同様、再登録のたびに解決済みインスタンスの キャッシュ(resolvedInstance)を確実に破棄する(Laravel の dropStaleInstances() 相当)。
Parameters
- $alias : string
- $class : string|callable
- $arguments : array<string|int, mixed> = []
singletonMake()
create service as singleton
public
singletonMake(string $alias) : mixed
Parameters
- $alias : string
createInstance()
インスタンスの生成
protected
createInstance(string $class[, array<string|int, mixed> $arguments = [] ]) : object
Parameters
- $class : string
- $arguments : array<string|int, mixed> = []
Return values
objectisDebugMode()
DEBUG_MODE 定数はプロセス内で不変(PHP の define() は再定義不可)のため、 テストからデバッグ/本番の両分岐を切り替えられるようテスト用 seam として protected 化する。 サブクラスで override すれば固定値を返せる。
protected
isDebugMode() : bool
Return values
boolassertExtendable()
override() / extend() の共通前提条件を検査する。
private
assertExtendable(string $alias, array{owner?: string, priority?: int} $options) : void
Parameters
- $alias : string
- $options : array{owner?: string, priority?: int}
dropStaleBindingState()
定義を丸ごと上書きする bind() / singleton() の共通後始末。
private
dropStaleBindingState(string $alias) : void
Laravel の Container::dropStaleInstances() 相当。override() / extend() の登録と 解決済みインスタンスのキャッシュを破棄し、次回の make() が必ず新しい定義から 生成されるようにする。
Parameters
- $alias : string
handleOverrideConflict()
同一 priority の override が競合した場合の処理。
private
handleOverrideConflict(string $alias, string $existingOwner, string $newOwner, int $priority) : void
DEBUG_MODE では例外を投げて即座に気付けるようにし、本番では先勝ちのまま警告ログを残す。
Parameters
- $alias : string
- $existingOwner : string
- $newOwner : string
- $priority : int
notifyBindingChanged()
private
notifyBindingChanged(string $alias) : void
Parameters
- $alias : string
reportGovernanceViolation()
デバッグモードでは LogicException を投げて即座に気付けるようにし、本番では警告ログを残して 呼び出し元に処理を継続させない(呼び出し元が return する)。override() の競合検出で使う エラー処理方針。
private
reportGovernanceViolation(string $message, array<string, mixed> $context) : void
Parameters
- $message : string
- $context : array<string, mixed>
sortedExtenders()
alias に登録済みの extend() デコレーターを適用順(priority 降順・同 priority は登録順)に返す。
private
sortedExtenders(string $alias) : array<int, Closure, priority: int, owner: string, seq: int}>
Parameters
- $alias : string