php 設(shè)計(jì)模式之 單例模式
更新時(shí)間:2008年12月19日 12:48:53 作者:
其實(shí)在工廠模式就已經(jīng)應(yīng)用了單例模式,從始到終它就只有一個(gè)工廠,單例模式不需要新建實(shí)例?,F(xiàn)在寫一個(gè)簡(jiǎn)單的例子。
小船類boat.php
<?php
class boat {
private static $instance=null;
private $skipper;
private $personNum=0;
private $passengers=array();
private function __construct() {
}
public static function getInstance(){
if (self::$instance==null){
self::$instance=new boat();
}
return self::$instance;
}
/**
* 設(shè)置船長(zhǎng)
*
* @param unknown_type $name
*/
public function setSkipper($name){
$this->skipper=$name;
}
/**
* 裝人
*
* @param unknown_type $person
*/
public function load($person){
if (!emptyempty($person) and $this->personNum<=5){
array_push($this->passengers,$person);
$this->personNum=$this->personNum+1;
}
if ($this->personNum>5) {
echo 'this boat only load 5 person!';
}
}
/**
* 船上裝了什么人
*
* @return unknown
*/
public function whoInBoat(){
return $this->passengers;
}
}
?>
現(xiàn)在看看怎么樣上客
<?php
include 'boat.php';
echo "從前有一條河,河里只有一條船,<br>";
$boat1=boat::getInstance();//因?yàn)橹挥幸粭l船,所以只有一個(gè)實(shí)例
echo "現(xiàn)在張三要到河?xùn)|去,";
$boat1->load('張三');
echo "<br>現(xiàn)在船上坐著:<br>";
foreach ($boat1->whoInboat() as $who){
echo $who.'<br>';
}
echo "<br>現(xiàn)在李四也要過(guò)河?xùn)|去<br>";
$boat1->load('李四');
echo "現(xiàn)在船上坐著:<br>";
foreach ($boat1->whoInboat() as $who){
echo $who.'、';
}
echo "<br><br>王五以為這條河有另一條船,<br>";
$boat2=boat::getInstance();
echo "他現(xiàn)在上船<br>";
$boat2->load('王五');
echo "現(xiàn)在船上坐著:<br>";
foreach ($boat1->whoInboat() as $who){
echo $who.'、';
}
?>
復(fù)制代碼 代碼如下:
<?php
class boat {
private static $instance=null;
private $skipper;
private $personNum=0;
private $passengers=array();
private function __construct() {
}
public static function getInstance(){
if (self::$instance==null){
self::$instance=new boat();
}
return self::$instance;
}
/**
* 設(shè)置船長(zhǎng)
*
* @param unknown_type $name
*/
public function setSkipper($name){
$this->skipper=$name;
}
/**
* 裝人
*
* @param unknown_type $person
*/
public function load($person){
if (!emptyempty($person) and $this->personNum<=5){
array_push($this->passengers,$person);
$this->personNum=$this->personNum+1;
}
if ($this->personNum>5) {
echo 'this boat only load 5 person!';
}
}
/**
* 船上裝了什么人
*
* @return unknown
*/
public function whoInBoat(){
return $this->passengers;
}
}
?>
現(xiàn)在看看怎么樣上客
復(fù)制代碼 代碼如下:
<?php
include 'boat.php';
echo "從前有一條河,河里只有一條船,<br>";
$boat1=boat::getInstance();//因?yàn)橹挥幸粭l船,所以只有一個(gè)實(shí)例
echo "現(xiàn)在張三要到河?xùn)|去,";
$boat1->load('張三');
echo "<br>現(xiàn)在船上坐著:<br>";
foreach ($boat1->whoInboat() as $who){
echo $who.'<br>';
}
echo "<br>現(xiàn)在李四也要過(guò)河?xùn)|去<br>";
$boat1->load('李四');
echo "現(xiàn)在船上坐著:<br>";
foreach ($boat1->whoInboat() as $who){
echo $who.'、';
}
echo "<br><br>王五以為這條河有另一條船,<br>";
$boat2=boat::getInstance();
echo "他現(xiàn)在上船<br>";
$boat2->load('王五');
echo "現(xiàn)在船上坐著:<br>";
foreach ($boat1->whoInboat() as $who){
echo $who.'、';
}
?>
相關(guān)文章
PHP Warning: Module ''modulename'' already loaded in問(wèn)題解決辦法
這篇文章主要介紹了PHP Warning: Module 'modulename' already loaded in問(wèn)題解決辦法,本文總結(jié)了兩種情況,需要的朋友可以參考下2015-03-03Larave框架通過(guò)sanctum進(jìn)行API鑒權(quán)詳解
Laravel是一套簡(jiǎn)潔、優(yōu)雅的PHP WEB開(kāi)發(fā)框架(PHP Web Framework),具有富于表達(dá)性且簡(jiǎn)潔的語(yǔ)法,Laravel是易于理解且強(qiáng)大的,它提供了強(qiáng)大的工具用以開(kāi)發(fā)大型,健壯的應(yīng)用,例如具有自動(dòng)驗(yàn)證、路由、Session、緩存、數(shù)據(jù)庫(kù)遷移工具、單元測(cè)試等常用的工具和功能2022-07-07iis下php mail函數(shù)的sendmail配置方法(官方推薦)
很多玩discuz的彭友在使用在線發(fā)郵件的功能,但是測(cè)試了"通過(guò) PHP 函數(shù)的 sendmail 發(fā)送(推薦此方式)"怎么都沒(méi)用,因?yàn)楸救爽F(xiàn)在用的是iis+php環(huán)境,所以就出這么一個(gè)教程,教大家在自己服務(wù)器上配置sendmail2012-04-04PHP和Mysql中轉(zhuǎn)UTF8編碼問(wèn)題匯總
這篇文章主要總結(jié)了PHP頁(yè)面和Mysql數(shù)據(jù)庫(kù)的轉(zhuǎn)UTF8編碼問(wèn)題,需要的朋友可以參考下2015-10-10PHP實(shí)現(xiàn)websocket通信的方法示例
這篇文章主要介紹了PHP實(shí)現(xiàn)websocket通信的方法,結(jié)合實(shí)例形式分析了php基于websocket類的socket通信相關(guān)客戶端與服務(wù)器端操作技巧,需要的朋友可以參考下2018-08-08php基于curl實(shí)現(xiàn)隨機(jī)ip地址抓取內(nèi)容的方法
這篇文章主要介紹了php基于curl實(shí)現(xiàn)隨機(jī)ip地址抓取內(nèi)容的方法,可生成隨機(jī)IP進(jìn)行訪問(wèn),涉及curl設(shè)置與使用技巧,需要的朋友可以參考下2016-10-10