天天看點

PHP設計模式(2)單例模式

某些應用程式資源是獨占的,因為有且隻有一個此類型的資源。例如,通過資料庫句柄到資料庫的連接配接是獨占的。您希望在應用程式中共享資料庫句柄,因為在保持連接配接打開或關閉時,它是一種開銷,在擷取單個頁面的過程中更是如此。

單例模式可以滿足此要求。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<code>&lt;em deep=</code><code>"8"</code><code>&gt;&lt;?php</code>

<code>class</code> <code>Mysql{</code>

<code>//定義一個私有的靜态變量,用來存放對象執行個體</code>

<code>private</code> <code>static</code> <code>$instance</code> <code>= null;</code>

<code>private</code> <code>$conn</code><code>;</code>

<code>//設定構造方法為私有,不允許通過new獲得對象</code>

<code>private</code> <code>function</code> <code>__construct(){</code>

<code>$conn</code> <code>= mysql_connect(</code><code>'localhost'</code><code>,</code><code>'root'</code><code>,</code><code>'123456'</code><code>);</code>

<code>}</code>

<code>//擷取執行個體方法</code>

<code>public</code> <code>static</code> <code>function</code> <code>getInstance(){</code>

<code>if</code><code>(! self::</code><code>$instance</code> <code>instanceof</code> <code>self){</code>

<code>self::</code><code>$instance</code> <code>= </code><code>new</code> <code>self;</code>

<code>return</code> <code>self::</code><code>$instance</code><code>;</code>

<code>//禁止克隆</code>

<code>private</code> <code>function</code> <code>__clone(){}</code>

<code>$db</code> <code>= Mysql::getInstance();&lt;/em&gt;</code>

這樣每個資料庫連接配接,都是用的一個對象執行個體。

本文轉自shayang8851CTO部落格,原文連結:http://blog.51cto.com/janephp/1342460,如需轉載請自行聯系原作者