1. 程式人生 > >單態(單例)設計模式

單態(單例)設計模式

autoloat


單態設計模式

一、

二、最終結果是只得到一個對象

1、不能讓用戶在外面new----->封裝構造方法

2、一個對象都得不到---->提供一個方法用來得到對象

3、普通的方法在外部無法訪問--->static靜態方法用來在外部直接訪問方法的作用,使用static修飾

4、方法中可以加判斷---->添加一個屬性

5、普通屬性無法再靜態中使用--->這個屬性也用靜態修飾

<--------------------------單態設計模式代碼----------------------------->

<?php

class A{

static public $link=null;

protected function __construct(){

echo ‘連接數據成功<br/>‘;

}

static public function getConnect(){

if(is_null(self::$link)){

self::$link= new A;

}

return self::$link;

}

}

//$p=new A;

//$p1=new A;

$p=A::getConnect();

$p1=A::getConnect();

if($p === $p1){

echo‘yes‘;

}else{

echo‘no‘;

}

三、魔術方法

1、__construct() 使用new 關鍵字得到對象的時候自動調用

2、__destruct()對對象銷毀的時候自動調用

3、__set()

4、__get()沒有權限獲取值的時候自動調用

5、__isset()

6、__unset()在沒有權限使用unset函數的時候自動調用

7、__toString()將一個對象當做字符串的時候自動調用

<?php

class A {

//講一個對象當做字符串的時候自動調用

public function __toString(){

//類的說明 必須返回一個字符串

return ‘當做字符串在此處輸出‘;

}

}

$a=new A;

echo $a;

8、__invoke()將對象當做函數的時候自動調用

9、__call()調用一個不存在的方法的時候會自動調用

<?php

class A {

//調用一個不存在的方法的時候會自動調用

public function __call($a,$b){

//第一個參數是調用的方法名

echo $a;

//第二個參數是調用時候傳遞的實參集合

var_dump($b);

//跳轉到404頁面

}

}

$p=new A;

echo $p->say(1,2,3,5);

10、__callStatic()調用一個不存在的靜態方法的時候會自動調用

<?php

class A {

static public function __callStatic($a,$b){

//第一個參數是調用的方法名

var_dump($a);

//第二個參數是調用時候傳遞的實參集合

var_dump($b);

}

}

$p=new A;

A::say(‘哈哈哈哈哈或‘);

11、__clone()通過clone 關鍵字得到對象的時候自動調用

<?php

class A {

public $name=‘cline‘;

public function __clone(){

echo ‘通過clone關鍵字得到對象的時候自動調用‘;

}

}

$a=new A;

$a->name=‘lisa‘;

//取別名

$b=$a;

var_dump($b);

//clone 會得到一個新對象

$p=clone $a;

var_dump($p);

if($a === $p){

echo ‘Y‘;

}else{

echo‘N‘;

}

12、__autoload()魔術函數 當我們在實例化一個對象的時候發現類不存在會自動調用此函數 補救措施

<?php

function __autoload($className){

echo $className.‘<br/>‘;

//自動加載內容

include‘./‘.$className.‘.class.php‘;

}

$w=new A;






單態(單例)設計模式