(Tutorial disyorkan: Tutorial video PHP)
Penyongsangan kawalan ialah idea adalah corak reka bentuk yang boleh mengurangkan gandingan.
Sebagai contoh
<?php class A{ public function getClassName(){ echo '我是class A'; } } class B{ public $test; public function __construct() { $this->test = new A(); //在类的内部获取依赖的对象。 //把依赖的对象写死在 Class B 中,由 Class B 选择依赖的对象,这叫做控制正转。 } } $b = new B(); $b->test->getClassName();
//Output Saya kelas A
Pembina kelas B bergantung pada kelas A. Jika kelas bergantung ( kelas A) dikodkan keras dalam kaedah pembinaan kelas B. Kaedah penulisan ini sangat bergandingan
Sebagai contoh,
jika kelas A dinamakan semula, kita perlu mengubah suai. kod kelas B.
Jika kelas B tidak memerlukan kelas A dan kelas C memerlukan kelas C, kita juga perlu mengubah suai kod kelas B.
Untuk menyelesaikan masalah ini, kita boleh menggunakan penyongsangan corak reka bentuk kawalan.
<?php class A{ public function getClassName(){ echo '我是class A'; } } class B{ public $test; public function __construct($obj) { $this->test = $obj; //不在类的内部写死依赖的对象,而是通过外部以参数的形式传入依赖的对象,这叫控制反转。 } } $b = new B (new A()); //注入 class A 的实例 $b->test->getClassName();
//Output Saya kelas A
Selepas mengubah suai kod dengan cara ini, kedua-dua masalah di atas dapat diselesaikan dengan lebih baik.
Jika kelas A dinamakan semula, kita tidak perlu mengubah suai kod kelas B, kita hanya perlu mengubah suai parameter yang dihantar ke dalam pembina kelas B.
Jika kelas B tidak memerlukan kelas A dan memerlukan kelas C, kita tidak perlu mengubah suai kod kelas B, kita hanya perlu mengubah suai parameter yang dihantar ke dalam pembina kelas B.
Jangan tulis kelas bersandar (kelas A) dalam pembina kelas B, tetapi lulus kelas bersandar (kelas A) ke dalam kelas dari luar dalam bentuk parameter apabila membuat instantiating Kelas B Dalam pembina kelas B, apabila kita tidak memerlukan kelas A, kita hanya perlu mengubah suai parameter yang dihantar ke dalam pembina kelas B tanpa mengubah suai kod kelas B, yang sangat mengurangkan gandingan.
Malah, dalam bahasa manusia, jangan instantiate kelas dalam kaedah, tetapi hantar objek ke dalam kaedah dengan menghantar parameter kepada kaedah.
Pada ketika ini, kelas B berubah daripada memilih kebergantungan secara aktif kepada menerima kebergantungan secara pasif dari luar Kaedah mendapatkan objek bergantung diterbalikkan, iaitu penyongsangan kawalan.
Suntikan Ketergantungan melepasi (menyuntik) objek yang diperlukan (bergantung pada) kaedah semasa ke dalam kaedah semasa dalam bentuk parameter.
Suntikan kebergantungan telah pun muncul dalam kod di atas
$b = new B (new A()); // class B 的构造方法需要一个对象 //注入 class A 的实例
Hubungan antara penyongsangan kawalan dan suntikan kebergantungan boleh diringkaskan dalam satu ayat suntikan Ketergantungan boleh digunakan untuk mencapai penyongsangan kawalan .
(Tutorial disyorkan: Tutorial video PHP)
Atas ialah kandungan terperinci Pengenalan kepada Pelaksanaan PHP Inversion of Control and Dependency Injection. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!