Rumah pembangunan bahagian belakang tutorial php 聊聊框架开发的依赖注入,容器与外观模式(下部)

聊聊框架开发的依赖注入,容器与外观模式(下部)

Jul 14, 2018 pm 01:47 PM
suntikan pergantungan bekas

这篇文章主要介绍了关于聊聊框架开发的依赖注入,容器与外观模式(下部),有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

外观模式:facade,也叫门面模式

1.用一句来说:就是将操作进行封装,对外提供一个统一的接口

2.因为操作可能分布在多个类中,而刚才学过的容器恰好可以将不同的类与实现封装起来

3.所以外观模式与依赖容器是黄金搭档,经常会放在一起使用

<?php 
/**
 * 用户登录的操作涉及三个操作
 * 1.连接数据库
 * 2.用户数据验证
 * 3.输出提示信息
 */
require &#39;container.php&#39;;
//创建Facade类,实现以上三个功能
class Facade
{
//连接数据库
public static function connect(Container $container)
{
return $container->make(&#39;db&#39;)->connect();
}
//用户数据验证
public static function check(Container $container)
{
return $container->make(&#39;validate&#39;)->check();
}
//输出提示信息
public static function display(Container $container)
{
return $container->make(&#39;view&#39;)->display();
}
}
//客户端调用
echo Facade::connect($container);
echo Facade::check($container);
echo Facade::display($container);
//可以在外观模型中使用初始化方法事先注入容器对象,来简化客户端调用
require &#39;container.php&#39;;
class Facade
{
//创建成员属性保存容器对象
protected static $container = null;
//创建初始化方法为容器对象赋值
public static function initialize(Container $container)
{
static::$container = $container;
}
/**
* 因为已经在初始化方法中将容器对象导入到了当前类中,
* 并且保存到了类的静态属性中,为所有类成员所共享,
* 所以以下方法可直接调用不用再容器注入
* 注意:这里全部采用后期静态延迟绑定方法来访问当前容器对象
* 这主要是为了方便用户在静态继承的上下文环境中进行调用
*/
//连接数据库
public static function connect()
{
return static::$container->make(&#39;db&#39;)->connect();
}
//用户数据验证
public static function check()
{
return static::$container->make(&#39;validate&#39;)->check();
}
//输出提示信息
public static function display()
{
return static::$container->make(&#39;view&#39;)->display();
}
}
//客户端调用
//初始化类门面类中的容器对象
Facade::initialize($container);
//静态统一调用内部的方法(无须重复注入依赖容器对象啦,实现了细节隐藏,通用性更强)
echo Facade::connect();
echo Facade::check();
echo Facade::display();
Salin selepas log masuk

下面将代码整合在一起:

<?php 
//数据库操作类
class Db
{
//数据库连接
public function connect()
{
return &#39;数据库连接成功<br>&#39;;
}
}
//数据验证类
class Validate
{
//数据验证
public function check()
{
return &#39;数据验证成功<br>&#39;;
}
}
//视图图
class View
{
//内容输出
public function display()
{
return &#39;用户登录成功&#39;;
}
}
/******************************************************************************/
//一.创建容器类
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(&#39;db&#39;, function(){
return new Db();
});
//将Validate类实例绑定到容器中
$container->bind(&#39;validate&#39;, function(){
return new Validate();
});
//将View类实例绑定到容器中
$container->bind(&#39;view&#39;, function(){
return new View();
});
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara menggunakan Docker untuk pemulihan kegagalan kontena dan mulakan semula automatik Cara menggunakan Docker untuk pemulihan kegagalan kontena dan mulakan semula automatik Nov 07, 2023 pm 04:28 PM

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

Cara memasang Redhat Podman pada Windows 10 atau 11 melalui CMD Cara memasang Redhat Podman pada Windows 10 atau 11 melalui CMD Oct 02, 2023 pm 09:33 PM

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

AtomHub, pusat pencerminan kontena sumber terbuka yang dicipta bersama oleh Huawei, Inspur dan unit lain, mengumumkan bahawa ia dibuka secara rasmi untuk ujian awam dan boleh memuat turun perkhidmatan domestik secara stabil. AtomHub, pusat pencerminan kontena sumber terbuka yang dicipta bersama oleh Huawei, Inspur dan unit lain, mengumumkan bahawa ia dibuka secara rasmi untuk ujian awam dan boleh memuat turun perkhidmatan domestik secara stabil. Jan 02, 2024 pm 03:54 PM

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

Panduan langkah demi langkah untuk memahami suntikan pergantungan dalam Angular Panduan langkah demi langkah untuk memahami suntikan pergantungan dalam Angular Dec 02, 2022 pm 09:14 PM

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.

Cara menggunakan suntikan kebergantungan (Dependency Injection) dalam rangka kerja Phalcon Cara menggunakan suntikan kebergantungan (Dependency Injection) dalam rangka kerja Phalcon Jul 30, 2023 pm 09:03 PM

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

Suntikan kebergantungan menggunakan rangka kerja ujian unit JUnit Suntikan kebergantungan menggunakan rangka kerja ujian unit JUnit Apr 19, 2024 am 08:42 AM

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.

Bagaimana untuk mengisih bekas C++ STL? Bagaimana untuk mengisih bekas C++ STL? Jun 02, 2024 pm 08:22 PM

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.

Apakah jenis biasa dalam bekas C++ STL? Apakah jenis biasa dalam bekas C++ STL? Jun 02, 2024 pm 02:11 PM

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.

See all articles