首页 > 后端开发 > php教程 > php单例模式的实例说明

php单例模式的实例说明

无忌哥哥
发布: 2023-04-01 21:34:01
原创
1277 人浏览过

* 单例模式:一个类仅允许创建一个实例

 * 例如:

 * 1.一个站点仅连接一个数据库连接对象

 * 2.一个站点仅允许存在一个配置类的实例对象

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

class Config1 {}

class Config

{

* 必须先声明一个静态私有属性:用来保存当前类的实例

* 1. 为什么必须是静态的?因为静态成员属于类,并被类所有实例所共享

* 2. 为什么必须是私有的?不允许外部直接访问,仅允许通过类方法控制方法

* 3. 为什么要有初始值null,因为类内部访问接口需要检测实例的状态,判断是否需要实例化

private static $instance = null;

//保存用户的自定义配置参数

private $setting = [];

//构造器私有化:禁止从类外部实例化

private function __construct(){}

//克隆方法私有化:禁止从外部克隆对象

private function __clone(){}

        //因为用静态属性返回类实例,而只能在静态方法使用静态属性

        //所以必须创建一个静态方法来生成当前类的唯一实例

public static function getInstance()

{

            //检测当前类属性$instance是否已经保存了当前类的实例

            if (self::$instance == null) {

                //如果没有,则创建当前类的实例

                self::$instance = new self();

            }

             

            //如果已经有了当前类实例,就直接返回,不要重复创建类实例

            return self::$instance;

}

//设置配置项

public function set($index, $value)

{

$this->setting[$index] = $value;

}

//读取配置项

public function get($index)

{

return $this->setting[$index];

}

}

$obj1 = new Config1;

$obj2 = new Config1;

var_dump($obj1,$obj2);

echo &#39;<hr>&#39;;

//实例化Config类

$obj1 = Config::getInstance();

$obj2 = Config::getInstance();

var_dump($obj1,$obj2);

$obj1->set(&#39;host&#39;,&#39;localhost&#39;);

echo $obj1->get(&#39;host&#39;);

登录后复制

以上是php单例模式的实例说明的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板