{"id":5008,"date":"2021-08-09T08:37:48","date_gmt":"2021-08-09T08:37:48","guid":{"rendered":"https:\/\/www.bearloga.space\/?page_id=5008"},"modified":"2021-08-09T08:37:48","modified_gmt":"2021-08-09T08:37:48","slug":"yii-vnedrenie-zavisimostej","status":"publish","type":"page","link":"https:\/\/www.bearloga.space\/en\/yii-vnedrenie-zavisimostej\/","title":{"rendered":"Yii \u2014 \u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 DI (\u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438) \u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b.&nbsp;Yii \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 DI \u0447\u0435\u0440\u0435\u0437&nbsp;<strong>\u043a\u043b\u0430\u0441\u0441 yii \\ di \\ Container<\/strong>&nbsp;.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u041e\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u0438\u0434\u044b DI \u2014<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>\u0421\u0435\u0442\u0442\u0435\u0440 \u0438 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430<\/li><li>PHP \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u0430\u044f \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u044f<\/li><li>\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u0439<\/li><li>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432\u043f\u0440\u044b\u0441\u043a\u0430<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 DI \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0438\u043d\u0436\u0435\u043a\u0446\u0438\u044e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043e\u043a \u0442\u0438\u043f\u0430 \u2014<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">class Object1 {\n   public function __construct(Object2 $object2) {\n\n   }\n}\n$object1 = $container-&gt;get('Object1');\n\/\/ which is equivalent to the following:\n$object2 = new Object2;\n$object1 = new Object1($object2);<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0418\u043d\u044a\u0435\u043a\u0446\u0438\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0438 \u0441\u0435\u0442\u0442\u0435\u0440\u043e\u0432 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u2014<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?php\n   use yii\\base\\Object;\n   class MyObject extends Object {\n      public $var1;\n      private $_var2;\n      public function getVar2() {\n         return $this-&gt;_var2;\n      }\n      public function setVar2(MyObject2 $var2) {\n         $this-&gt;_var2 = $var2;\n      }\n   }\n   $container-&gt;get('MyObject', [], [\n      'var1' =&gt; $container-&gt;get('MyOtherObject'),\n      'var2' =&gt; $container-&gt;get('MyObject2'),\n   ]);\n?&gt;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u043d\u044a\u0435\u043a\u0446\u0438\u0438, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 PHP, \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043e\u0431\u0440\u0430\u0442\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 PHP \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u0430 \u2014<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">$container-&gt;set('Object1', function () {\n   $object1 = new Object1(new Object2);\n   return $object1;\n});\n$object1 = $container-&gt;get('Object1');<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u2014 \u044d\u0442\u043e \u0442\u0438\u043f DI, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043e\u043a \u0442\u0438\u043f\u0430.&nbsp;\u042d\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 MVC \u0442\u043e\u043d\u043a\u0438\u043c\u0438, \u043b\u0435\u0433\u043a\u0438\u043c\u0438 \u0438 \u0442\u043e\u043d\u043a\u0438\u043c\u0438 \u2014<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public function actionSendToAdmin(EmailValidator $validator, $email) {\n   if ($validator-&gt;validate($email)) {\n      \/\/ sending email\n   }\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u00a0<strong>yii \\ db \\ Container :: set ()<\/strong>\u00a0\u0434\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u2014<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?php\n   $container = new \\yii\\di\\Container;\n   \/\/ register a class name as is. This can be skipped.\n   $container-&gt;set('yii\\db\\Connection');\n   \/\/ register an alias name. You can use $container-&gt;get('MyObject')\n   \/\/ to create an instance of Connection\n   $container-&gt;set('MyObject', 'yii\\db\\Connection');\n   \/\/ register an interface\n   \/\/ When a class depends on the interface, the corresponding class\n   \/\/ will be instantiated as the dependent object\n   $container-&gt;set('yii\\mail\\MailInterface', 'yii\\swiftmailer\\Mailer');\n   \/\/ register an alias name with class configuration\n   \/\/ In this case, a \"class\" element is required to specify the class\n   $container-&gt;set('db', [\n      'class' =&gt; 'yii\\db\\Connection',\n      'dsn' =&gt; 'mysql:host=127.0.0.1;dbname = helloworld',\n      'username' =&gt; 'vladimir',\n      'password' =&gt; '12345',\n      'charset' =&gt; 'utf8',\n   ]);\n   \/\/ register a class with configuration. The configuration\n   \/\/ will be applied when the class is instantiated by get()\n   $container-&gt;set('yii\\db\\Connection', [\n      'dsn' =&gt; 'mysql:host=127.0.0.1;dbname = helloworld',\n      'username' =&gt; 'vladimir',\n      'password' =&gt; '12345',\n      'charset' =&gt; 'utf8',\n   ]);\n   \/\/ register a PHP callable\n   \/\/ The callable will be executed each time when $container-&gt;get('db') is called\n   $container-&gt;set('db', function ($container, $params, $config) {\n      return new \\yii\\db\\Connection($config);\n   });\n   \/\/ register a component instance\n   \/\/ $container-&gt;get('pageCache') will return the same instance each time when it \n      \/\/is called\n   $container-&gt;set('pageCache', new FileCache);\n?&gt;<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f DI<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0428\u0430\u0433 1<\/strong>&nbsp;\u2014 \u0412\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u043f\u043a\u0438&nbsp;<strong>\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432<\/strong>&nbsp;\u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0444\u0430\u0439\u043b \u0441 \u0438\u043c\u0435\u043d\u0435\u043c&nbsp;<strong>MyInterface.php<\/strong>&nbsp;\u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043a\u043e\u0434\u043e\u043c.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?php\n   namespace app\\components;\n   interface MyInterface {\n      public function test();\n   }\n?&gt;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0428\u0430\u0433 2<\/strong>&nbsp;\u2014 \u0412\u043d\u0443\u0442\u0440\u0438 \u043f\u0430\u043f\u043a\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0434\u0432\u0430 \u0444\u0430\u0439\u043b\u0430.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>First.php<\/strong>&nbsp;\u2014<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?php\n   namespace app\\components;\n   use app\\components\\MyInterface;\n   class First implements MyInterface {\n      public function test() {\n         echo \"First class &lt;br&gt;\";\n      }\n   }\n?&gt;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Second.php<\/strong>&nbsp;\u2014<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?php\n   app\\components;\n   use app\\components\\MyInterface;\n      class Second implements MyInterface {\n      public function test() {\n         echo \"Second class &lt;br&gt;\";\n      }\n   }\n?&gt;<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0428\u0430\u0433 3<\/strong>&nbsp;\u2014 \u0422\u0435\u043f\u0435\u0440\u044c \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435&nbsp;<strong>actionTestInterface<\/strong>&nbsp;\u0432 SiteController.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">public function actionTestInterface() {\n   $container = new \\yii\\di\\Container();\n   $container-&gt;set\n      (\"\\app\\components\\MyInterface\",\"\\app\\components\\First\");\n   $obj = $container-&gt;get(\"\\app\\components\\MyInterface\");\n   $obj-&gt;test(); \/\/ print \"First class\"\n   $container-&gt;set\n      (\"\\app\\components\\MyInterface\",\"\\app\\components\\Second\");\n   $obj = $container-&gt;get(\"\\app\\components\\MyInterface\");\n   $obj-&gt;test(); \/\/ print \"Second class\"\n}<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u0428\u0430\u0433 4<\/strong>&nbsp;\u2014 \u0417\u0430\u0439\u0434\u0438\u0442\u0435 \u043d\u0430&nbsp;<strong>http: \/\/ localhost: 8080 \/ index.php? R = site \/ test-interface,<\/strong>&nbsp;\u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/coderlessons.com\/wp-content\/uploads\/2019\/07\/using_di.png\" alt=\"\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f DI\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">\u042d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u0443\u0434\u043e\u0431\u0435\u043d \u0442\u0435\u043c, \u0447\u0442\u043e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0441\u044b \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435, \u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u041a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 DI (\u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438) \u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b.&nbsp;Yii \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440 DI \u0447\u0435\u0440\u0435\u0437&nbsp;\u043a\u043b\u0430\u0441\u0441 yii \\ [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[156],"tags":[],"class_list":["post-5008","page","type-page","status-publish","hentry","category-yii"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.bearloga.space\/en\/wp-json\/wp\/v2\/pages\/5008","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bearloga.space\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.bearloga.space\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.bearloga.space\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bearloga.space\/en\/wp-json\/wp\/v2\/comments?post=5008"}],"version-history":[{"count":1,"href":"https:\/\/www.bearloga.space\/en\/wp-json\/wp\/v2\/pages\/5008\/revisions"}],"predecessor-version":[{"id":5009,"href":"https:\/\/www.bearloga.space\/en\/wp-json\/wp\/v2\/pages\/5008\/revisions\/5009"}],"wp:attachment":[{"href":"https:\/\/www.bearloga.space\/en\/wp-json\/wp\/v2\/media?parent=5008"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bearloga.space\/en\/wp-json\/wp\/v2\/categories?post=5008"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bearloga.space\/en\/wp-json\/wp\/v2\/tags?post=5008"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}