🤪
PHPでクラスの呼び出し元を縛る便利クラス作ったよ〜
これはなに?
例えば、Hogeクラスを呼び出したいとなったとき、少なくともHogeBuilderクラス経由にてHogeクラスを呼び出したいなぁっとなったときに役立ててほしいです。
コードは?
これだよ!
<?php
namespace Package\Sample\BuilderPattern;
use LogicException;
class CreateClassHelper
{
/**
* new を禁止する
*/
private function __construct()
{
// nop
}
/**
* @param string $className
* @param int $traceLimit
* @return void
*/
public static function shouldBeCalledFrom(
string $className,
int $traceLimit = 5
): void {
foreach (debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, $traceLimit) as $backtrace) {
if (isset($backtrace['class']) && $backtrace['class'] === $className) {
return;
}
}
throw new LogicException(
sprintf(
'This method should be called from %s',
$className
)
);
}
}
使い方は?
呼び出し元を縛りたいクラスのコンストラクタで呼び出すといいかもー!
CreateClassHelper::shouldBeCalledFrom(SampleBuukderClass::class);
懸念点は?
debug_backtrace
の使い方が本来の用途から逸脱してるっぽそう
Discussion
deptracの内容を実装で行っており、より詳細に指定するという点で、良いなと思いましたー!
依存の方向があまり決定せずに進んでしまったプロジェクトに利用することで、徐々に依存関係を良い方向に持っていくのに使えそうです!!!
コメントありがとうございます!そうおっしゃっていただけると嬉しいです!
ただ、
debug_backtrace
をこの用途で本当に使っていいのかは悩んでいます。。汗