PHP依存注入と容器

1464 ワード

前言:
この話題を話す前に、「逆置きの原則に依存する」という比較的ハイエンドの思想を話します.「依存逆置きはソフトウェア設計思想であり、従来のソフトウェアでは、上層コードは下層コードに依存し、下層コードが変更された場合、上層コードもそれに応じて変更されるため、メンテナンスコストが高い.また、逆置きの原則に依存する思想は、上層は下層に依存すべきではなく、インタフェースに依存すべきである.上層コード定義インタフェースであり、下層コードはこのインタフェースを実現し、下層を上層インタフェースに依存させ、結合度を低下させ、システムの弾力性を高める」という観点から、DI(依存注入)に対する私の観点は、注入に依存するというより、管理に依存しているが、composer、pip、mavenのようなより高い管理アプリケーションとライブラリ間の依存ツールに似ており、DIフレームワークはこれらのメリットをもたらす(良いDIフレームワークが前提)
栗:
class Human
{
    public function eat()
    {
        echo "eat";
    }
}

class Man
{
    protected $human;

    /**
     *     
     * Man constructor.
     * @param $human
     */
    public function __construct($human)
    {
        $this->human = $human;
    }

    public function sex()
    {
        $this->human->eat();
        echo "man";
    }
}

/**
 *   
 * Class Container
 */
class Container
{
    static $class = [];

    public static function bind($className, Closure $closure)
    {
        self::$class[$className] = $closure;
    }

    public static function make($className)
    {
        $closure = self::$class[$className];
        return $closure();
    }
}

Container::bind('human', function () {
    return new Human();
});
Container::bind("man", function () {
    $human = Container::make('human');
    return new Man($human);
});
$man = Container::make("man");
$man->sex();

について述べる
上記は単純な栗ですが、生産段階では上記のコードは推奨されません