{"id":579,"title":"laravel\u6846\u67b6\u6838\u5fc3-\u53cd\u5c04\u3001\u4f9d\u8d56\u6ce8\u5165\u3001\u63a7\u5236\u53cd\u8f6c","good":0,"bad":0,"hit":1982,"created_at":"2023-02-08 04:11:33","content":"

\u4e3a\u4ec0\u4e48\u4f1a\u6709\u53cd\u5c04\uff1f<\/p>

\u5982\u679c\u6211\u4eec\u5199\u4e86\u4e00\u4e2a\u7c7bA\uff0c\u5728\u5176\u5b83\u5730\u65b9\u8c03\u7528A\uff0c\u800cA\u4e2d\u53c8new\u4e86\u4e00\u4e2a\u7c7bB\uff0c\u5047\u5982\u6211\u4eec\u4e2d\u9014\u9700\u8981\u5c06A\u4e2dnew\u7684\u7c7bB\u6362\u6210\u7c7bC,\u5219\u9700\u8981\u4fee\u6539\u7c7bA\uff0c\u5982\u679c\u8c03\u7528\u7684\u5730\u65b9\u5c11\uff0c\u4fee\u6539\u4e0b\u95ee\u9898\u4e0d\u5927\uff0c\u4f46\u5982\u679c\u5f88\u591a\u5730\u65b9\u8c03\u7528\u7684\u8bdd\uff0c\u4fee\u6539\u8d77\u6765\u4e0d\u65b9\u4fbf\uff0c\u98ce\u9669\u5927\uff0c\u5076\u5408\u4e5f\u9ad8\uff1b\u73b0\u5728\u6211\u4eec\u5e0c\u671b\u52a8\u6001\u7684\u5904\u7406\u8fd9\u4e9b\u4f9d\u8d56\uff0c\u90a3\u53ef\u4ee5\u901a\u8fc7\u6784\u5efa\u51fd\u6570\u7b49\u65b9\u5f0f\u5c06B\u6ce8\u5165A\uff0cA\u4f9d\u8d56B\uff0c\u5219A\u4f9d\u8d56\u6ce8\u5165\u4e86B\uff08\u4e5f\u53ef\u80fd\u662fC\uff0cD\u7b49\u3002\u3002\u3002\uff09\uff0c\u5982\u679c\u63a7\u5236\u4f20\u7edf\u7684\u65b9\u5f0f\uff0c\u5728\u7c7b\u5185\u9762new\uff0c\u90a3\u6bcf\u6b21\u90fd\u8981\u4fee\u6539\uff0c\u5047\u5982\u4f9d\u8d56\u5f88\u591a\u4e2a\uff0c\u8fd8\u5f97\u589e\u52a0\u6216\u51cf\u5c11\uff0c\u80fd\u4e0d\u80fd\u505a\u5230\u52a8\u6001\u5904\u7406\u8fd9\u4e9b\u4f9d\u8d56\u5462\uff1b\u53ef\u4ee5\uff0c\u6211\u4eec\u53ef\u4ee5\u7ed3\u5408 namespace\u627e\u5230\u8fd9\u4e2a\u7c7b\u6587\u4ef6\uff0c\u89e3\u6790\u4ed6\u83b7\u5f97\u4ed6\u7684\u7c7b\u540d\uff0c\u65b9\u6cd5\uff0c\u5c5e\u6027\uff0c\u6ce8\u91ca\u7b49\uff0c\u662f\u4e0d\u662f\u5c31\u53ef\u4ee5\u64cd\u4f5c\u8fd9\u4e2a\u7c7b\u4e86\uff0c\u8fd9\u4e2a\u89e3\u6790\u5c31\u662f\u53cd\u5c04\uff1b<\/p>

php\u901a\u8fc7\u53cd\u5c04\u6765\u5b9e\u73b0\u4f9d\u8d56\u6ce8\u5165\u7b80\u5355\u5217\u5b50 (hu-rong.com)<\/a><\/p>

\u4ee5\u4e0b\u6587\u7ae0\u5f88\u5f62\u8c61\u7684\u63cf\u8ff0\u4e86\u4f9d\u8d56\u6ce8\u5165\u4e0e\u63a7\u5236\u53cd\u8f6c\uff1a<\/p>

\u6d45\u8c08\u63a7\u5236\u53cd\u8f6c\u4e0e\u4f9d\u8d56\u6ce8\u5165 - \u77e5\u4e4e (zhihu.com)<\/a><\/p>

\u5982\u679c\u4e00\u4e2a\u7c7bA \u7684\u529f\u80fd\u5b9e\u73b0\u9700\u8981\u501f\u52a9\u4e8e\u7c7bB\uff0c\u90a3\u4e48\u5c31\u79f0\u7c7bB\u662f\u7c7bA\u7684\u4f9d\u8d56<\/span>\uff0c\u5982\u679c\u5728\u7c7bA\u7684\u5185\u90e8\u53bb\u5b9e\u4f8b\u5316\u7c7bB\uff0c\u90a3\u4e48\u4e24\u8005\u4e4b\u95f4\u4f1a\u51fa\u73b0\u8f83\u9ad8\u7684\u8026\u5408<\/span>\uff0c\u4e00\u65e6\u7c7bB\u51fa\u73b0\u4e86\u95ee\u9898\uff0c\u7c7bA\u4e5f\u9700\u8981\u8fdb\u884c\u6539\u9020\uff0c\u5982\u679c\u8fd9\u6837\u7684\u60c5\u51b5\u8f83\u591a\uff0c\u6bcf\u4e2a\u7c7b\u4e4b\u95f4\u90fd\u6709\u5f88\u591a\u4f9d\u8d56\uff0c\u90a3\u4e48\u5c31\u4f1a\u51fa\u73b0\u7275\u4e00\u53d1\u800c\u52a8\u5168\u8eab\u7684\u60c5\u51b5\uff0c\u7a0b\u5e8f\u4f1a\u6781\u96be\u7ef4\u62a4<\/span>\uff0c\u5e76\u4e14\u5f88\u5bb9\u6613\u51fa\u73b0\u95ee\u9898\u3002\u8981\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff0c\u5c31\u8981\u628aA\u7c7b\u5bf9B\u7c7b\u7684\u63a7\u5236\u6743\u62bd\u79bb\u51fa\u6765\uff0c\u4ea4\u7ed9\u4e00\u4e2a\u7b2c\u4e09\u65b9\u53bb\u505a\uff0c\u628a\u63a7\u5236\u6743\u53cd\u8f6c\u7ed9\u7b2c\u4e09\u65b9\uff0c\u5c31\u79f0\u4f5c\u63a7\u5236\u53cd\u8f6c\uff08IOC Inversion Of Control\uff09<\/span>\u3002\u63a7\u5236\u53cd\u8f6c\u662f\u4e00\u79cd\u601d\u60f3<\/span>\uff0c\u662f\u80fd\u591f\u89e3\u51b3\u95ee\u9898\u7684\u4e00\u79cd\u53ef\u80fd\u7684\u7ed3\u679c\uff0c\u800c\u4f9d\u8d56\u6ce8\u5165\uff08Dependency Injection\uff09<\/span>\u5c31\u662f\u5176\u6700\u5178\u578b\u7684\u5b9e\u73b0\u65b9\u6cd5\u3002\u7531\u7b2c\u4e09\u65b9\uff08\u6211\u4eec\u79f0\u4f5cIOC\u5bb9\u5668<\/span>\uff09\u6765\u63a7\u5236\u4f9d\u8d56\uff0c\u628a\u4ed6\u901a\u8fc7\u6784\u9020\u51fd\u6570\u3001\u5c5e\u6027\u6216\u8005\u5de5\u5382\u6a21\u5f0f<\/span>\u7b49\u65b9\u6cd5\uff0c\u6ce8\u5165\u5230\u7c7bA\u5185\uff0c\u8fd9\u6837\u5c31\u6781\u5927\u7a0b\u5ea6\u7684\u5bf9\u7c7bA\u548c\u7c7bB\u8fdb\u884c\u4e86\u89e3\u8026<\/span>\u3002<\/blockquote>

<\/p>

laravel\u4e2d\u7684\u63a7\u5236\u53cd\u8f6c\uff1a<\/p>

(3\u6761\u6d88\u606f) \u7406\u89e3laravel---1.2 \u63a7\u5236\u53cd\u8f6c2_zhuxineli\u7684\u535a\u5ba2-CSDN\u535a\u5ba2<\/a><\/p>

(3\u6761\u6d88\u606f) \u7406\u89e3laravel---1.3 \u63a7\u5236\u53cd\u8f6c3_zhuxineli\u7684\u535a\u5ba2-CSDN\u535a\u5ba2<\/a><\/p>

<?php\n\/**\n * author\uff1ahurong\n * website:http:\/\/www.hu-rong.com\n *\/\n\n\n\/**\n * @author zhuxinlei\n * @date 2020-06-12\n * @desc \u6211\u662f\u7c7bA\u7684\u6ce8\u91ca\n *\/\nclass A\n{\n    \/\/\u6211\u662f\u6784\u9020\u51fd\u6570\u7684\u6ce8\u91ca\n    public function __construct(B $b)\n    {\n        $this->b = $b;\n    }\n\n    \/\/\u6211\u662fgetB\u7684\u6ce8\u91ca\n    public function getB()\n    {\n        $this->b->bMethod();\n    }\n}\n\nclass B\n{\n    public function __construct(C $c, D $d)\n    {\n        $this->c = $c;\n        $this->d = $d;\n    }\n\n    public function bMethod()\n    {\n        echo "\u6211\u662fB\u4e2d\u7684\u65b9\u6cd5bMethod()";\n    }\n}\n\nclass C\n{\n    public function __construct()\n    {\n\n    }\n\n    public function cMethod()\n    {\n        echo "\u6211\u662fC\u4e2d\u7684\u65b9\u6cd5cMethod()";\n    }\n\n}\n\nclass D\n{\n    public function __construct()\n    {\n\n    }\n\n    public function dMethod()\n    {\n        echo "\u6211\u662fD\u4e2d\u7684\u65b9\u6cd5dMethod()";\n    }\n}\n\nclass Ioc\n{\n    protected $instances = [];\n\n    public function __construct()\n    {\n    }\n\n    public function getInstance($abstract)\/\/$abstract string "A"\n    {\n        \/\/\u83b7\u53d6\u7c7b\u7684\u53cd\u5c04\u4fe1\u606f,\u4e5f\u5c31\u662f\u7c7b\u7684\u6240\u6709\u4fe1\u606f\n        \/\/$reflector:object(ReflectionClass)#2 (1) { ["name"]=> string(1) "A" }\n        $reflector = new ReflectionClass($abstract);\n        \/\/  echo $reflector->getDocComment();  \u83b7\u53d6\u7c7b\u7684\u6ce8\u91ca\u4fe1\u606f\n\n        \/\/\u83b7\u53d6\u53cd\u5c04\u7c7b\u7684\u6784\u9020\u51fd\u6570\u4fe1\u606f\n        \/\/object(ReflectionMethod)#3 (2) { ["name"]=> string(11) "__construct" ["class"]=> string(1) "A" }\n        $constructor = $reflector->getConstructor();\n        \/\/\u83b7\u53d6\u53cd\u5c04\u7c7b\u7684\u6784\u9020\u51fd\u6570\u7684\u53c2\u6570\n        \/\/array(1) { [0]=> object(ReflectionParameter)#4 (1) { ["name"]=> string(1) "b" } }\n        $dependencies = $constructor->getParameters();\n\n\n        if (!$dependencies) {\n            return new $abstract();\n        }\n        foreach ($dependencies as $dependency) {\n            \/\/$dependency:object(ReflectionParameter)#4 (1) { ["name"]=> string(1) "b" }\n            if (!is_null($dependency->getClass())) {\n                \/\/$dependency->getClass:object(ReflectionClass)#5 (1) { ["name"]=> string(1) "B" }\n                \/\/$dependency->getClass->name: string(1) "B"\n                $p[] = $this->make($dependency->getClass()->name);\n                \/\/\u8fd9\u91cc$p[0]\u662fC\u7684\u5b9e\u4f8b\u5316\u5bf9\u8c61,$p[1]\u662fD\u7684\u5b9e\u4f8b\u5316\u5bf9\u8c61\n            }\n        }\n        \/\/\u521b\u5efa\u4e00\u4e2a\u7c7b\u7684\u65b0\u5b9e\u4f8b,\u7ed9\u51fa\u7684\u53c2\u6570\u5c06\u4f20\u9012\u5230\u7c7b\u7684\u6784\u9020\u51fd\u6570\n        \/**\n         * $p\n         *Array\n         * (\n         * [0] => C Object\n         * (\n         * )\n         *\n         * [1] => D Object\n         * (\n         * )\n         *\n         * )\n         * Array\n         * (\n         * [0] => B Object\n         * (\n         * [c] => C Object\n         * (\n         * )\n         *\n         * [d] => D Object\n         * (\n         * )\n         *\n         * )\n         *\n         * )\n         * )\n         *\/\n        \/**\n         * $reflector->newInstanceArgs($p)\n         *\n         * B Object\n         * (\n         * [c] => C Object\n         * (\n         * )\n         *\n         * [d] => D Object\n         * (\n         * )\n         *\n         * )\n         * A Object\n         * (\n         * [b] => B Object\n         * (\n         * [c] => C Object\n         * (\n         * )\n         *\n         * [d] => D Object\n         * (\n         * )\n         *\n         * )\n         *\n         * )\n         *\/\n        \/\/ReflectionClass::newInstanceArgs - \u4ece\u7ed9\u51fa\u7684\u53c2\u6570\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u7c7b\u5b9e\u4f8b\u3002\n        return $reflector->newInstanceArgs($p);\n    }\n\n\n    public function make($abstract)\n    {\n        return $this->getInstance($abstract);\n    }\n}\n\n$ioc = new Ioc();\n$a = $ioc->make('A');\n$a->getB();<\/pre>

<\/p>"}