大話php設計模式視頻,大話PHP設計模式

工廠模式

用工廠方法或者類來實例化對象,而不是直接new。

首先我們需要創建一個工廠類,比如Factory.php。如果不使用工廠模式的,我們需要一個對象的時候通常需要

new Inexistence\girlfriend();

然而我們一般不只在一個地方需要這個對象,這個時候一旦對象發生變更,或者對象的某些屬性發生變化,我們就需要一個一個的來改,非常麻煩。這個時候我們引入工廠類,在Factory.php中

865a9279fd4a9bccad0104a0d2a1f3f5.png

然后每次調用時$GF1 = Imagination\Factory::getGirlfriend()就可以避免四處修改的問題。

在Laravel中這樣的設計模式很常見。

385ef872d31adb108ab5269ac275b5a9.png

單例模式

即確保某個類的對象僅被創建一次。比如我們在database里面存了很多女生的聯系方式,如果我們用pdo的話每次查找都會new一個對象,勢必會造成資源的浪費。所以我們就在connect之前做個判斷。

6cea25bcc2912b72be95988e3e393319.png

這里面比較關鍵的地方在于聲明了一個私有變量和私有的構造方法,然后再在這個類里面new自己,就避免了在其他地方重復實例化的問題。這個時候我們已經沒法直接new Database了,我們只能通過調用get Instance方法來建立連接。這里順帶講一下PHP的鏈式操作的實現。在很多框架比如用完26個字母就不知道怎么辦的thinkPHP和Laravel中對數據庫的操作可以使用鏈式操作,這樣可以使代碼更為優雅。具體實現就是使用return this;,這樣就可以用where($where)->order($order)->limit(1);來代替多行語句。

Laravel使用了三目運算符來代替if,顯得更為優雅。

注冊模式

解決全局共享和交換對象的問題。實際上就是把實例好的對象放進一個數組,在任何地方要用的時候就去出來。就好比有一課樹,我們把new好的$GF1,$GF2。。。一個一個掛上去,要用的時候再取出來。

78079fa39ed1a6d9cd765e47c65af530.png

unset在PHP中是關鍵字,所以用_unset代替。這樣的話我們就要在工廠類中用一下Register::set()方法,把new好的對象掛樹上。為了調用方便,Register中還需要一個get()方法來取對象。

6def8ed4b3c0df5b87f3c293436a62fc.png

這樣我們也就不用再去使用單例模式了,直接從注冊器中取Register::get()。

Laravel中用了更優雅的方式。

97f137e03531e5f51e6efea7f5e18411.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/537848.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/537848.shtml
英文地址,請注明出處:http://en.pswp.cn/news/537848.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Git 2.19 對Diff、Branch和Grep等做了改進

\Git的最新版帶來了豐富的新功能以及內部更新,包括改進的diff、branch和grep,更好的命令行補全,新的range-diff命令等。\\Git diff現在可以正確地標記以intent-to-add參數添加的新文件路徑。intent-to-add可以和git add命令一起使用&#xff…

su oracle c expdp,expdp/impdp 數據泵導入導出

useridtest/test --導出的用戶,本地用戶!!directorydmpfile --導出的邏輯目錄,一定要在oracle中創建完成的,并且給用戶授權讀寫權限dumpfilexx.dmp --導出的數據文件的名稱,如果想在指定的位置的話可以寫…

Centos 升級GLIBCXX3.4.25

32位系統: http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc6_4.7.2-5_i386.deb 64位系統: wget http://ftp.de.debian.org/debian/pool/main/g/gcc-8/libstdc6_8.2.0-7_amd64.deb 其他版本 http://ftp.de.debian.org/debian/pool/main/g/ 解壓 ar -x libst…

美團點評基于MGR的CMDB高可用架構搭建之路【轉】

王志朋 美團點評DBA 曾在京東金融擔任DBA,目前就職于美團點評,主要負責金融業務線數據庫及基礎組件數據庫的運維。 MySQL Group Replication(以下簡稱MGR),于5.7.17版本正式GA,由Oracle官方出品&#xff0c…

使用 redmind 進行項目任務管理

一、項目經理 1.1、新建任務(工單) 1.2、查看任務狀態 二、團隊成員 2.1、查看任務 作為這個團隊的成員之一,每天開工第一件事便是進入redmine查看“我的工作臺”中自己的任務 2.2、每日反饋任務完成狀態 1、每天開始工作時,及時將任務狀態從“新…

oracle11g創建表空間大文件,oracle11g創建表空間 sql語法

--oracle 11g創建有限制大小的永久表空間--create tablespace test--datafile F:\app\shan\product\11.2.0\dbhome_1\oradata\test.dbf size 1M--autoextend on next 2M maxsize 1024M;--修改表空間大小:--alter database datafile F:\app\shan\product\11.2.0\dbho…

內存泄漏優化

目錄介紹: 1.什么是內存泄漏2.內存泄漏造成什么影響3.內存泄漏檢測的工具有哪些4.關于Leakcanary使用介紹5.Leakcanary捕捉常見的內存泄漏及解決辦法 5.0.1 錯誤使用單例造成的內存泄漏5.0.2 錯誤使用靜態變量,導致引用后無法銷毀5.0.3 [常見]Handler使用…

redmine更換主題

主題列表:http://www.redmine.org/projects/redmine/wiki/Theme_List 雖然有很多主題,但是很多主題都是要錢的,像這類(上圖)沒有下載地址的,都是要錢的。 含GitHub的下載地址的,是免費可下載的&…

redmine 郵箱配置(阿里云+windows)

說明 密碼是第三方的授權碼,不是郵箱密碼 需要登錄126網頁版,在設置里開啟 smtp 等第三方服務,設置授權碼 阿里云Linux 默認屏蔽25號端口,所以需要開啟ssl,和使用 465 端口 重啟下 redmind sh /opt/redmine-3.4.6-…

linux查看當前用戶終端,Linux----基本命令的使用(vi命令,查看文件內容,顯示進程,切換用戶等)...

1、vi是linux系統上經常使用的一個文本編輯器,其有三種模式:命令模式、編輯模式(插入模式)、末行模式。命令模式——>編輯模式:“i a o I A O”linux編輯模式——>命令模式:“ESC”shell命令模式——>末行模式&#xff1…

centos6.8 環境一鍵安裝包 nginx配置thinkphp5

---恢復內容開始--- lnmp1.4 一鍵安裝包 nginx配置thinkphp5 環境:Nginx1.12.1 PHP5.6 Coentos6.8 修改網站配置文件 server{listen 443 ssl http2;#listen [::]:443 ssl http2;server_name xxx.cn;index index.html index.htm index.php default.html default.ht…

Linux下BitNami Redmine的插件安裝與更新

截至2017年3月27日,Redmine-3.3.2-2安裝以下的15款插件全部成功并通過測試(下面顯示為插件正確文件夾名): easy_wbs redmine_ckeditor 提供所見即所得編輯器 redmine_graphs 提供部分問題圖表功能 progressive_projects_list 是…

linux 進程 讀寫鎖,linux 下實現高性能讀寫鎖(read/write lock)

前一篇文章分析了Windows slim read/write lock的工作原理。我們知道它的設計相當精妙,于是我們可以借鑒它的思路來設計linux下的讀寫鎖。在這個讀寫鎖的設計上,需要注意的是linux和windows有以下幾點區別:(1)windows使用的keyedevent機制需要…

Linux下redmine安裝插件報錯

報錯如下: There was an error parsing Gemfile: compile error - syntax error, unexpected :, expecting $end gem tzinfo-data, platforms: [:mingw, :x64_mingw, :mswin, :jruby]^. Bundler cannot continue. 原因是: redmine不同版本對ruby版本有…

ajax post 提交無法進入controller 請求200

最近寫js遇到個問題: 用ajax的post方式給后臺提交數據,頁面200,但是不進入controller 斷點,我以為我post參數不對。 網上查的: 1.說路徑不對,但是我通過get方式是可以進入的,路徑是沒問題的&…

cuda 編譯 linux,Linux下安裝Tensorflow源碼及編譯

下載Tensorflow源碼git clone https://github.com/tensorflow/tensorflow如果無法下載也可以在github上直接下載tensorflow的打包文件,這樣也能編譯,但是不能使用git命令可根據需要切換到不同的分支安裝bazel輸入以下命令echo "deb [archamd64] htt…

testflight進行用戶的beta測試

發發發轉載于:https://www.cnblogs.com/caimaomao/p/9681483.html

linux限制ping的時間,如何限制Linux命令程序運行的時間

Linux提供了大量的命令,每個命令都是唯一的,并且在特定的情況下使用。Linux的目標是幫助您盡可能地高效工作。Linux命令的一個屬性是時間限制。您可以為任何您想要的命令設置時間限制。如果時間過期,命令停止執行。在本教程中,您將…

微軟網絡工具psping介紹

該工具功能主要包括:ICMP Ping、TCP Ping、延遲測試、帶寬測試,而且它是微軟出品的下載地址:https://download.sysinternals.com/files/PSTools.ziphttp://technet.microsoft.com/en-us/sysinternals/jj729731解壓后把psping.exe丟到C:\Windo…

mac svn

https://formac.informer.com/tortoisesvn