单例模式
单例模式顾名思义,就是只有一个实例。作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例
单例模式的特点:
三私一共:
1、私有的静态变量(存放实例),
2、私有的构造方法(防止创建实例);
3、私有的克隆方法(防止克隆对象);
4、公有的静态方法(对外界提供实例);
必须先声明一个静态私有属性:用来保存当前类的实例:private static $instance = null;
-
- 为什么必须是静态的?因为静态成员属于类,并被类所有实例所共享
-
- 为什么必须是私有的?不允许外部直接访问,仅允许通过类方法控制方法
-
- 为什么要有初始值null,因为类内部访问接口需要检测实例的状态,判断是否需要实例化
应用场景:
程序应用中,涉及到数据库操作时,如果每次都操作的时候连接数据库,会带来大量的资源消耗,可以通过单例模式,创建唯一的数据库连接对象。
为什么要用php单例模式
1.php的应用主要在于数据库应用,一个应用中会存在大量数据库操作,在使用面向对象的方式开发时,如果使用单例模式,则可以避免大量的new操作消耗的资源,还可以减少数据库连接,这样就不容易出现too many connections情况。
2.如果系统中需要一个类来全局控制某些配置信息,那么使用单例模式可以很方便的实现,这个可以参看zend Framwork的FrontController部分。
3.在一次页面请求中,便与进行调试,因为所有的代码(例如数据库操作类db)都集中在一个类中,我们可以在类中设置钩子,输出日志,从而避免导出var_dump(),echo .
#实例:
1
11 class man
12 {
13
14 private static $_instance;
15
16
17 private function __construct()
18 {
19 echo '我被实例化了!';
20 }
21
22
23 public static function get_instance()
24 {
25 var_dump(isset(self::$_instance));
26
27 if(!isset(self::$_instance))
28 {
29 self::$_instance=new self();
30 }
31 return self::$_instance;
32 }
33
34
35 private function __clone()
36 {
37 trigger_error('Clone is not allow' ,E_USER_ERROR);
38 }
39
40 function test()
41 {
42 echo("test");
43
44 }
45 }
46
47
48
49
50
51 $test = man::get_instance();
52 $test = man::get_instance();
53 $test->test();
54
55
56
简单工厂模式
使用工厂模式,可以避免当改变某个类的名字会方法后,在调用这个类的所有代码中都修改他的名字或参数。
1、抽象基类:类中定义抽象一些方法,用以在子类中实现。
含有抽象属性或抽象方法的类必定是抽象方法
2、继承自抽象基类的子类:实现积累中的抽象方法。
3、工厂类:用以实例化所有相对应的子类。
Test1.php
<?php
class Test1
{
static function test(){
echo __FILE__;
}
}
Factory.php
<?php
class Factory
{
static function createDatabase(){
$test = new Test1();
return $test;
}
}
Test.php
<?php
spl_autoload_register('autoload');
$test = Factory::createdDatabase();
$test->test();
function autoload($class){
$dir = __DIR__;
$requireFile = $dir.'\\'.$class.'.php';
require $requireFile;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)