Rumah > Artikel > pembangunan bahagian belakang > Mari kita bercakap tentang corak tunggal dalam PHP
Dalam artikel sebelumnya "Analisis mendalam corak kaedah templat dalam PHP " kami memperkenalkan corak kaedah templat dalam PHP Artikel ini akan membawa anda memahami singleton dalam corak reka bentuk PHP. model.
Corak tunggal pastinya menduduki tempat pertama antara corak reka bentuk temu duga yang biasa digunakan dan sering ditanya. Di satu pihak, ia cukup mudah dan boleh dijelaskan dalam beberapa perkataan. Sebaliknya, ia cukup kompleks Pelaksanaannya bukan sahaja dalam satu bentuk, tetapi juga perlu mempertimbangkan isu penguncian berbilang benang dalam bahasa tak segerak seperti Java. Jadi semasa temu duga, jangan fikir penemuduga akan berehat apabila dia bertanya soalan tentang model tunggal Model ini benar-benar boleh menjadi mendalam atau cetek, dan ia boleh menggambarkan tahap pembangun. Kerana selagi anda bekerja untuk satu tempoh masa, anda pasti akan bersentuhan dengan model ini.
Definasi GoF: Pastikan kelas hanya mempunyai satu tika dan menyediakan pusat akses global untuk mengaksesnya.
Rajah kelas GoF
Pelaksanaan kod
class Singleton { private static $uniqueInstance; private $singletonData = '单例类内部数据'; private function __construct() { // 构造方法私有化,外部不能直接实例化这个类 } public static function GetInstance() { if (self::$uniqueInstance == null) { self::$uniqueInstance = new Singleton(); } return self::$uniqueInstance; } public function SingletonOperation(){ $this->singletonData = '修改单例类内部数据'; } public function GetSigletonData() { return $this->singletonData; } }
Ya, intinya ialah kelas tunggal, tiada yang lain. Biarkan pembolehubah statik menyimpan dirinya selepas instantiasi. Apabila objek ini diperlukan, panggil kaedah GetInstance() untuk mendapatkan objek unik secara global.
$singletonA = Singleton::GetInstance(); echo $singletonA->GetSigletonData(), PHP_EOL; $singletonB = Singleton::GetInstance(); if ($singletonA === $singletonB) { echo '相同的对象', PHP_EOL; } $singletonA->SingletonOperation(); // 这里修改的是A echo $singletonB->GetSigletonData(), PHP_EOL;
panggilan pelanggan, kami akan mendapati bahawa singletonB ialah objek yang sama.
Syarikat ini semakin lama semakin besar, tetapi kami hanya mempunyai satu salinan (kelas tunggal) daripada semua senarai senarai syarikat, yang disimpan dalam sistem OA kami. Apa yang saya takut, kekeliruan akan timbul selepas setiap jabatan mempunyai jadual masing-masing Contohnya, jika kemas kini tidak menepati masa, pekerja yang baru menyertai atau meletakkan jawatan dari jabatan lain akan terlepas. Jabatan lain boleh melihat keseluruhan jadual apabila diperlukan, atau mereka boleh membuat dan mengubah suai bahagian jabatan mereka sendiri berdasarkan keseluruhan senarai. Tetapi dalam sistem OA, apa yang sebenarnya mereka ubah suai ialah kandungan senarai umum Apa yang semua orang kekalkan sebenarnya adalah satu-satunya senarai sebenar yang disimpan dalam pelayan sistem OA
Kod penuh: https: //github.com/zhangyue0503/designpatterns-php/blob/master/21.singleton/source/singleton.php
Sejak itu disebutkan di atas bahawa kedua-dua kelas operasi pangkalan data dan kelas permintaan rangkaian suka menggunakan mod tunggal, maka kami akan melaksanakan pembangunan mod tunggal untuk kelas permintaan Http. Saya masih ingat bahawa semasa saya bekerja pada Android suatu masa dahulu, tidak terdapat banyak rangka kerja seperti yang terdapat sekarang.
Cache gambarajah kelas
Kod sumber penuh: https://github.com / zhangyue0503/designpatterns-php/blob/master/21.singleton/source/singleton-http.php
<?php class HttpService{ private static $instance; public function GetInstance(){ if(self::$instance == NULL){ self::$instance = new HttpService(); } return self::$instance; } public function Post(){ echo '发送Post请求', PHP_EOL; } public function Get(){ echo '发送Get请求', PHP_EOL; } } $httpA = new HttpService(); $httpA->Post(); $httpA->Get(); $httpB = new HttpService(); $httpB->Post(); $httpB->Get(); var_dump($httpA == $httpB);
Penerangan
Dalam bahasa statik seperti Java. , pembolehubah statik boleh menjadi objek baharu secara langsung, dalam perisytiharan
contoh = new HttpService();. Dengan cara ini, kaedah GetInstance() boleh diabaikan, tetapi pembolehubah statik ini akan diinstantiate terus dan menduduki memori tanpa mengira sama ada ia digunakan atau tidak. Singleton jenis ini dipanggil corak singleton Cina yang lapar.
Alamat asal: https://juejin.cn/post/6844903990585458702
Pengarang: Pengurus Projek Tegar
Pembelajaran yang disyorkan: " Tutorial Video PHP"
Atas ialah kandungan terperinci Mari kita bercakap tentang corak tunggal dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!