a-blog cms PHP API Reference

Container
in package
implements ContainerInterface

DI Container

Class Acms\Services\Container

Table of Contents

Interfaces

ContainerInterface

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
bool

extend()

デコレーション(既存実装をラップ)。

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
throws
RuntimeException

newInstance()

create instance

public newInstance(mixed $class[, array<string|int, mixed> $arguments = [] ]) : mixed
Parameters
$class : mixed
$arguments : array<string|int, mixed> = []
Tags
inheritDoc

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
object

isDebugMode()

DEBUG_MODE 定数はプロセス内で不変(PHP の define() は再定義不可)のため、 テストからデバッグ/本番の両分岐を切り替えられるようテスト用 seam として protected 化する。 サブクラスで override すれば固定値を返せる。

protected isDebugMode() : bool
Return values
bool

assertExtendable()

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
Return values
array<int, Closure, priority: int, owner: string, seq: int}>

        
On this page

Search results