详解 PHP 中的三大经典模式

人盡茶涼 提交于 2019-12-04 14:29:49

 

单例模式

 

单例模式的含义:

作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。

单例模式的三个要素:

1. 保存类唯一实例的静态变量。

2. 构造函数和克隆函数必须是私有的,放在外部去实例化,这样就不存在单例模式的意义。

3. 提供一个可供外部访问的公共静态方法,这个方法返回该类的唯一实例。

单例模式的意义:

在 PHP 中的应用主要在于数据库应用, 所以一个应用中会存在大量的数据库操作, 在使用面向对象的方式开发时, 如果使用单例模式, 则可以避免大量的 new 操作消耗的资源。而不完全是对系统资源的节省, 可以避免重复实例化,因为 PHP 每次实例化一个类之后都会清理掉对应的资源,当再次使用的时候又会在重新去实例化一次。

单例模式使用的场景:

1. 数据库操作,减少对数据路的 new 操作,从而减少内存资源和系统资源的消耗。

2. 配置资源的共享,在一个系统中,配置资源都是全局的,使用单例模式也可以减少每次去读取配置带来的内存和系统资源的消耗。

代码演示:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

<?php

class Single

{

    public static $attribute = '';

    public static $instance = '';

    private function __construct($attribute = '个人技术')

    {

        self::$attribute = $attribute;

    }

    public static function getInstance($attribute = '我是编程浪子走四方1')

    {

        if (!(self::$instance instanceof self)) self::$instance = new self($attribute);

        return self::$instance;

    }

}

单例模式和非单例模式的区别:

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

49

50

class Single {

    public function index() {

        return '';

    }

}

$single1 = new Single();

$single2 = new Single();

var_dump($single1);

var_dump($single2);

if ($single2 === $single1) {

    echo "是同一个对象";

} else {

    echo "不是同一个对象";

}

// object(Single)#1 (0) {

// }

// object(Single)#2 (0) {

// }

// 不是同一个对象

class Single2 {

    // 1.声明一个静态属性,用户保存类的实例

    public static $instance;

    //3. 将构函数私有化,避免外部new(每new一次,就不是同一个实例)

    private function __construct() {

    }

    // 2.声明一个静态的公共方法,用户外部调用本类的实例

    public

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!