首頁 > 後端開發 > php教程 > php對象工廠類

php對象工廠類

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
發布: 2016-07-30 13:30:57
原創
1119 人瀏覽過

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

51

52

<?php

/**

 * 对象工厂

 * @author flynetcn

 */

class ObjectFactory

{

    private static $objSet = array();

 

    /**

     * 清空工厂中的对象

     */

    public function clear()

    {

        self::$objSet = array();

    }

 

    /**

     * 在工厂中创建对象并将其返回

     * 参数格式:$class_name, $class_param1, $class_param2, ...

     */

    public static function create()

    {

        $argc = func_num_args();

        if ($argc <= 0) {

            throw new Exception(&#39;params error&#39;, 1);

        }

        $args = func_get_args();

        $class_name = array_shift($args);

        $params = $args;

        if (!$params) {

            $class_sign = $class_name;

        } else {

            $param_sign = serialize($params);

            if (strlen($param_sign) > 100) {

                $param_sign = md5($param_sign);

            }

            $class_sign = $class_name.'@'.$param_sign;

        }

        if (isset(self::$objSet[$class_sign])) {

            return self::$objSet[$class_sign];

        }

        $ref = new ReflectionClass($class_name);

        if ($ref->hasMethod('__construct') && !empty($params)) {

            $obj = $ref->newInstanceArgs($params);

        } else {

            $obj = $ref->newInstance(); 

        }

        self::$objSet[$class_sign] = $obj;

        return $obj;

    }

}

登入後複製

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。

以上就介紹了php物件工廠類,包括了方面的內容,希望對PHP教程有興趣的朋友有幫助。

相關標籤:
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板