聊聊框架开发的依赖注入,容器与外观模式(下部)
这篇文章主要介绍了关于聊聊框架开发的依赖注入,容器与外观模式(下部),有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
外观模式:facade,也叫门面模式
1.用一句来说:就是将操作进行封装,对外提供一个统一的接口
2.因为操作可能分布在多个类中,而刚才学过的容器恰好可以将不同的类与实现封装起来
3.所以外观模式与依赖容器是黄金搭档,经常会放在一起使用
<?php /** * 用户登录的操作涉及三个操作 * 1.连接数据库 * 2.用户数据验证 * 3.输出提示信息 */ require 'container.php'; //创建Facade类,实现以上三个功能 class Facade { //连接数据库 public static function connect(Container $container) { return $container->make('db')->connect(); } //用户数据验证 public static function check(Container $container) { return $container->make('validate')->check(); } //输出提示信息 public static function display(Container $container) { return $container->make('view')->display(); } } //客户端调用 echo Facade::connect($container); echo Facade::check($container); echo Facade::display($container); //可以在外观模型中使用初始化方法事先注入容器对象,来简化客户端调用 require 'container.php'; class Facade { //创建成员属性保存容器对象 protected static $container = null; //创建初始化方法为容器对象赋值 public static function initialize(Container $container) { static::$container = $container; } /** * 因为已经在初始化方法中将容器对象导入到了当前类中, * 并且保存到了类的静态属性中,为所有类成员所共享, * 所以以下方法可直接调用不用再容器注入 * 注意:这里全部采用后期静态延迟绑定方法来访问当前容器对象 * 这主要是为了方便用户在静态继承的上下文环境中进行调用 */ //连接数据库 public static function connect() { return static::$container->make('db')->connect(); } //用户数据验证 public static function check() { return static::$container->make('validate')->check(); } //输出提示信息 public static function display() { return static::$container->make('view')->display(); } } //客户端调用 //初始化类门面类中的容器对象 Facade::initialize($container); //静态统一调用内部的方法(无须重复注入依赖容器对象啦,实现了细节隐藏,通用性更强) echo Facade::connect(); echo Facade::check(); echo Facade::display();
下面将代码整合在一起:
<?php //数据库操作类 class Db { //数据库连接 public function connect() { return '数据库连接成功<br>'; } } //数据验证类 class Validate { //数据验证 public function check() { return '数据验证成功<br>'; } } //视图图 class View { //内容输出 public function display() { return '用户登录成功'; } } /******************************************************************************/ //一.创建容器类 class Container { //创建属性,用空数组初始化,该属性用来保存类与类的实例化方法 public $instance = []; //初始化实例数组,将需要实例化的类,与实例化的方法进行绑定 public function bind($abstract, Closure $process) { //键名为类名,值为实例化的方法 $this->instance[$abstract] = $process; } //创建类实例 public function make($abstract, $params=[]) { return call_user_func_array($this->instance[$abstract],[]); } } /******************************************************************************/ //二、服务绑定: 将类实例注册到容器中 $container = new Container(); //将Db类绑定到容器中 $container->bind('db', function(){ return new Db(); }); //将Validate类实例绑定到容器中 $container->bind('validate', function(){ return new Validate(); }); //将View类实例绑定到容器中 $container->bind('view', function(){ return new View(); });
php从php5.3起,大量的吸收其它编程语言的优点,支持越来越多的新特性,特别是php7.0的推出,使php发到了新高度,是一个里程碑式的版本。更多优秀的php开发教程,请持续关注:php中文网(www.php.cn)。
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
Atas ialah kandungan terperinci 聊聊框架开发的依赖注入,容器与外观模式(下部). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Sebagai platform virtualisasi ringan berdasarkan teknologi kontena, Docker telah digunakan secara meluas dalam pelbagai senario. Dalam persekitaran pengeluaran, ketersediaan tinggi dan pemulihan kegagalan automatik bekas adalah penting. Artikel ini akan memperkenalkan cara menggunakan Docker untuk pemulihan kegagalan kontena dan mula semula automatik, termasuk contoh kod tertentu. 1. Konfigurasi permulaan semula bekas automatik Dalam Docker, fungsi mula semula automatik bekas boleh didayakan dengan menggunakan pilihan --restart semasa menjalankan bekas. Pilihan biasa ialah: tidak: jangan mulakan semula secara automatik. senyap

Pasang RedHatPodman pada Windows 11 atau 10 Ikuti langkah ini untuk memasang RedHatPodman pada mesin Windows anda menggunakan Command Prompt atau Powershell: Langkah 1: Semak Keperluan Sistem Mula-mula, anda perlu memastikan bahawa sistem Windows anda berjalan dengan kemas kini terkini supaya ia boleh memenuhi keperluan untuk menjalankan keperluan Podman. Anda sepatutnya menggunakan Windows 11 atau Windows 10 versi 1709 (Build 16299) atau lebih tinggi dan anda perlu mendayakan ciri Windows Subsystem untuk Linux 2 (WSL2) dan VM, jika ia belum diaktifkan lagi, anda boleh menggunakan Perintah dua langkah melaksanakan ini

Berita rasmi Huawei menunjukkan bahawa Persidangan Pembangun Atom Terbuka, dengan tema "Segala-galanya untuk Pembangun", telah diadakan di Wuxi selama dua hari, dari 16 hingga 17 Disember. Persidangan itu diketuai oleh Yayasan Sumber Terbuka Atom Terbuka, Huawei, dan Inspur. , DaoCloud, Xieyun, Qingyun, Hurricane Engine, serta OpenSDV Open Source Alliance, komuniti openEuler, komuniti OpenCloudOS dan unit ahli lain bersama-sama memulakan pembinaan Pusat Cermin Dipercayai AtomHub, yang dibuka secara rasmi untuk ujian awam. AtomHub mematuhi konsep pembinaan bersama, tadbir urus bersama dan perkongsian serta bertujuan untuk menyediakan organisasi sumber terbuka dan pembangun pusat cermin kontena sumber terbuka dipercayai neutral, terbuka dan dibina bersama. Memandangkan ketidakstabilan dan ketidakstabilan gudang imej seperti DockerHub, dan beberapa

Artikel ini akan membawa anda melalui suntikan pergantungan, memperkenalkan masalah yang diselesaikan oleh suntikan pergantungan dan kaedah penulisan asalnya, dan bercakap tentang rangka kerja suntikan pergantungan Angular saya harap ia akan membantu semua orang.

Pengenalan kepada kaedah menggunakan suntikan kebergantungan (DependencyInjection) dalam rangka kerja Phalcon: Dalam pembangunan perisian moden, suntikan kebergantungan (DependencyInjection) ialah corak reka bentuk biasa yang bertujuan untuk meningkatkan kebolehselenggaraan dan kebolehujian kod. Sebagai rangka kerja PHP yang pantas dan kos rendah, rangka kerja Phalcon juga menyokong penggunaan suntikan kebergantungan untuk mengurus dan mengatur kebergantungan aplikasi. Artikel ini akan memperkenalkan anda cara menggunakan rangka kerja Phalcon

Untuk menguji suntikan kebergantungan menggunakan JUnit, ringkasannya adalah seperti berikut: Gunakan objek olok-olok untuk mencipta kebergantungan: Anotasi @Mock boleh mencipta objek olok-olok bagi kebergantungan. Tetapkan data ujian: Kaedah @Sebelum dijalankan sebelum setiap kaedah ujian dan digunakan untuk menetapkan data ujian. Konfigurasikan tingkah laku olok-olok: Kaedah Mockito.when() mengkonfigurasi gelagat yang dijangkakan bagi objek olok-olok. Sahkan keputusan: assertEquals() menegaskan untuk menyemak sama ada hasil sebenar sepadan dengan nilai yang dijangkakan. Aplikasi praktikal: Anda boleh menggunakan rangka kerja suntikan kebergantungan (seperti Rangka Kerja Spring) untuk menyuntik kebergantungan, dan mengesahkan ketepatan suntikan dan operasi biasa kod melalui ujian unit JUnit.

Cara mengisih bekas STL dalam C++: Gunakan fungsi sort() untuk mengisih bekas di tempatnya, seperti std::vector. Menggunakan bekas yang dipesan std::set dan std::map, elemen diisih secara automatik semasa sisipan. Untuk susunan isihan tersuai, anda boleh menggunakan kelas pembanding tersuai, seperti mengisih vektor rentetan mengikut abjad.

Jenis bekas yang paling biasa dalam C++STL ialah Vektor, Senarai, Deque, Set, Map, Stack dan Queue. Bekas ini menyediakan penyelesaian untuk keperluan penyimpanan data yang berbeza, seperti tatasusunan dinamik, senarai berganda dan bekas bersekutu berasaskan kunci dan nilai. Dalam amalan, kami boleh menggunakan bekas STL untuk menyusun dan mengakses data dengan cekap, seperti menyimpan gred pelajar.
