博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式-PHP实现单件模式的几种方式
阅读量:2239 次
发布时间:2019-05-09

本文共 1312 字,大约阅读时间需要 4 分钟。

单件模式是我们在开发中经常用到的一种设计模式,利用PHP5面向对象的特性,我们可以很容易的构建单件模式的应用,下面是单件模式在PHP中的几种实现方法:

class
 
Stat
{
    
static
 
$instance
 
=
 
NULL
;
    
    
static
 
function
 getInstance(){
        
if
(self
::
$instance
 
==
 
NULL
){
            self
::
$instance
 
=
 
new
 
Stat
();
        }
        
        
return
 self
::
$instance
;
    }
    
    
private
 
function
 __construct(){
    }
    
    
private
 
function
 __clone(){
    }    
    
    
function
 sayHi(){
        
return
 
"
The Class is saying hi to u 
"
;
    }
}
echo
 
Stat
::
getInstance()
->
sayHi();

 

这是一种最通常的方式,在一个getInstance方法中返回唯一的类实例。

对这里例子稍加修改,便可以产生一个通用的方法,只要叫道任何你想用到单件的类里,就可以了。

class
 Teacher{
    
function
 sayHi(){
        
return
 
"
The teacher smiling and said 'Hello '
"
;
    }
    
    
static
 
function
 getInstance(){
        
static
 
$instance
;
        
        
if
(
!
isset
(
$instance
)){
            
$c
 
=
 
__CLASS__
;
            
$instance
 
=
 
new
 
$c
;
        }
        
        
return
 
$instance
;
    }
}
echo
 Teacher
::
getInstance()
->
sayHi();

 

最后一种是提供一个singleton类,然后通过调用getInstance方法,可以为任何一个类生产出一个实例来。

class
 singleton{
    
function
 getInstance(
$class
){
        
static
 
$instances
 
=
 
array
();
        
if
(
!
array_key_exists
(
$class
,
$instances
)){
            
$instances
[
$class
=
 
&
new
 
$class
;
        }
        
$instance
 
=
 
$instances
[
$class
];
        
        
return
 
$instance
;
    }
}
class
 People{
    
function
 sayHi(){
        
return
 
'
Hello i am a people?
'
;
    }
}
echo
 
"
<br />
"
;
echo
 singleton
::
getInstance(
'
People
'
)
->
sayHi();

 

通过这三种方法,我们可以很容易的应用单件模式,如果能够结合工厂模式,将使我们的编程变得更有条理和效率。

转载于:https://www.cnblogs.com/cocowool/archive/2009/03/18/1415660.html

你可能感兴趣的文章
日本語の記号の読み方
查看>>
计算机英语编程中一些单词
查看>>
JavaScript 经典例子
查看>>
判断数据的JS代码
查看>>
js按键事件说明
查看>>
AJAX 初次体验!推荐刚学看这个满好的!
查看>>
AJAX 设计制作 在公司弄的 非得要做出这个养的 真晕!
查看>>
Linux 查看文件大小
查看>>
Java并发编程:线程池的使用
查看>>
redis单机及其集群的搭建
查看>>
Java多线程学习
查看>>
检查Linux服务器性能
查看>>
Java 8新的时间日期库
查看>>
Chrome开发者工具
查看>>
【LEETCODE】102-Binary Tree Level Order Traversal
查看>>
【LEETCODE】106-Construct Binary Tree from Inorder and Postorder Traversal
查看>>
【LEETCODE】202-Happy Number
查看>>
和机器学习和计算机视觉相关的数学
查看>>
十个值得一试的开源深度学习框架
查看>>
【LEETCODE】240-Search a 2D Matrix II
查看>>