Dalam PHP, suntikan kebergantungan bermakna kebergantungan pada kelas disuntik secara automatik melalui pembina. Sebaik sahaja kekangan jenis objek diletakkan pada parameter dalam kaedah seni bina pengawal dan kaedah operasi, suntikan kebergantungan akan dihapuskan secara automatik Memandangkan parameter untuk mengakses pengawal datang daripada permintaan URL, pembolehubah biasa diperoleh secara automatik melalui pengikatan parameter, dan pembolehubah objek diperoleh. melalui penjanaan suntikan.
Persekitaran pengendalian artikel ini: sistem Windows 10, PHP versi 7.1, komputer Dell G3.
Suntikan kebergantungan pada dasarnya merujuk kepada suntikan kebergantungan kelas secara automatik melalui pembina Contohnya, sebaik sahaja parameter disuntik dalam kaedah seni bina pengawal dan kaedah operasi , Kekangan jenis objek secara automatik akan mencetuskan suntikan pergantungan Memandangkan parameter pengawal akses datang daripada permintaan URL, pembolehubah biasa diperoleh secara automatik melalui pengikatan parameter dan pembolehubah objek dijana melalui suntikan pergantungan.
Pergantungan yang dipanggil, sebagai contoh, ialah Orang kelas dan Kereta kelas lain Jika kaedah Orang, seperti memandu, perlu merujuk Kereta, kelas Orang dikatakan bergantung kepada kelas Kereta , memanjangkan kepada objek Hubungan pergantungan ini masih dipegang Contohnya, budak objek kelas Orang bergantung pada objek Toyota kelas Kereta. Mari kita bincangkan tentang pelaksanaan kaedah pemacu ini Anggapkan bahawa kodnya adalah seperti berikut:
Public Person{ ... public void drive(){ Car toyota=new Car("TOYOTA"); toyota.挂档; toyota.踩油门; toyota.打方向; } }
Kebergantungan dalam keputusan ini dalam budak objek yang perlu bertanggungjawab untuk penciptaan objek toyota, dan juga. pengurusan keseluruhan kitaran hayat, dan ini Jelas sekali ia akan membawa keburukan seperti gandingan yang tinggi dan kesukaran dalam penyelenggaraan Sebagai contoh, jika anda mahu budak ini memandu Audi, anda perlu mengubah suai kod seperti Orang.
Oleh itu, prinsip yang sangat terkenal telah dicadangkan dalam teori reka bentuk Java, Penyongsangan Ketergantungan Idea teras adalah untuk menukar kebergantungan antara kelas konkrit kepada kebergantungan abstrak sebanyak mungkin, iaitu kelas Orang harus bergantung pada kelas abstrak ICar, dan bukannya Kereta kelas tertentu Di sini Java sangat mengesyorkan penggunaan abstraksi dan antara muka Bagi perbezaan antara abstraksi dan antara muka, mana-mana buku JAVA tidak akan saya katakan lagi di sini.
Prinsip penyongsangan kebergantungan ini juga dicerminkan dalam banyak corak reka bentuk, seperti mod kilang dan mod binaan Saya secara peribadi berpendapat bahawa penyongsangan kawalan IoC sebenarnya boleh dianggap sebagai corak reka bentuk yang melaksanakan prinsip ini. Penyongsangan kawalan, saya tidak pernah begitu memahami maksud perkataan kawalan, tetapi cara lain untuk mengatakan penyongsangan kawalan ialah suntikan pergantungan, yang secara peribadi saya dapati lebih mudah untuk difahami. Kita ambil contoh boy dan toyota di atas Intinya adalah untuk menyuntik objek toyota yang budak lelaki bergantung kepada budak, tanpa budak itu perlu merujuk kepada toyota sendiri Proses suntikan ini biasanya diselesaikan oleh program kawalan, tanpa perlu budak itu rujuk toyota. Objek yang perlu diambil berat, contohnya:
Public Person{ private ICar car; public Person(ICar onecar){ car=onecar; } public void drive(){ car.挂档; car.踩油门; car.打方向; } }
Pada masa ini, proses menyuntik dan memanggil adalah sangat mudah, seperti berikut:
Toyota toyota=new Toyota(); Person boy=new Person(toyota); boy.drive();
Nota: Di sini kami menganggap bahawa kelas Toyota Ia adalah pelaksanaan khusus bagi kelas antara muka ICar.
Contoh ini menunjukkan contoh kaedah suntikan paling mudah, iaitu suntikan kaedah pembina, yang dicapai dengan menyuntik objek bergantung ke dalam pembina objek. Terdapat juga kaedah suntikan yang biasa digunakan, iaitu suntikan atribut, yang bermaksud ia dicapai dengan menyuntik objek bergantung ke dalam sifat objek Mari kita ambil contoh budak dan toyota, seperti berikut:
Public Person{ private ICar car; public Person(){ } public void drive(){ car.挂档; car.踩油门; car.打方向; } public ICar getCar(){ return this.car; } public void setCar(ICar onecar){ car=onecar; } }
Ini Pada masa ini, proses suntikan dan panggilan menjadi seperti berikut:
Toyota toyota=new Toyota(); Person boy=new Person(); boy.setCar(toyota); boy.drive();
Pada ketika ini, konsep suntikan kebergantungan haruslah agak jelas Mari kita lihat bagaimana untuk melaksanakan IoC dalam Spring dan lihat bagaimana Spring Sebagai bekas IoC yang matang, Spring sebenarnya melaksanakan IoC terutamanya melalui dua konsep Pertama, melalui fail konfigurasi XML, objek dan objek bergantung Sudah tentu, fail XML perlu mematuhi spesifikasi ditentukan oleh Spring. Kemudian gunakan kelas BeanFactroy dalam seni bina untuk melaksanakan proses suntikan yang disebutkan di atas secara automatik, masih mengambil budak dan toyota sebagai contoh, seperti berikut:
Pertama, kelas Orang masih sama,
Kemudian xml Tambah sesuatu pada fail konfigurasi - (diandaikan sebagai bean.xml):
<?xml version="1.0" encoding="GBK"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="oneCar" class="Toyota"> <!-- Toyota类是ICar的一个实现--> </bean> <bean id="onePerson" class="Person"> <!--本例以属性方式注入为例 --> <property name="car"> <ref bean="oneCar"></ref> </property> </bean> </beans>
Akhirnya, proses panggilan menjadi seperti berikut:
BeanFactory factory=new XmlBeanFactory("bean.xml"); Person boy=(Person )factory.getBean("onePerson"); boy.drive();
Disyorkan kajian: " Tutorial video PHP》
Atas ialah kandungan terperinci Apakah maksud suntikan pergantungan php?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!