ecmall中static变量的使用-model模型代码设计

?





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

53

54

55

function &m($model_name, $params
= array(), $is_new = false)

{

    <span style="background-color: rgb(255, 0, 0);">static
$models = array();</span>

    $model_hash = md5($model_name . var_export($params, true));

    if
($is_new || !isset($models[$model_hash]))

    {

        $model_file = ROOT_PATH . ‘/includes/models/‘
. $model_name . ‘.model.php‘;

        if
(!is_file($model_file))

        {

            /* 不存在该文件,则无法获取模型 */

            return
false;

        }

        include_once($model_file);

        $model_name = ucfirst($model_name) . ‘Model‘;

        if
($is_new)

        {

            return
new $model_name($params, db());

        }

        $models[$model_hash] = new
$model_name($params, db());

    }

    print_r($models[$model_hash]);

    return
$models[$model_hash];

}

/**

 * 获取一个业务模型

 *

 * @param string $model_name

 * @param array $params

 * @param bool $is_new

 * @return object

 */

function &bm($model_name, $params
= array(), $is_new = false)

{

    <span style="background-color: rgb(255, 0, 0);">static
$models = array();</span>

    $model_hash = md5($model_name . var_export($params, true));

    if
($is_new || !isset($models[$model_hash]))

    {

        $model_file = ROOT_PATH . ‘/includes/models/‘
. $model_name . ‘.model.php‘;

        if
(!is_file($model_file))

        {

            /* 不存在该文件,则无法获取模型 */

            return
false;

        }

        include_once($model_file);

        $model_name = ucfirst($model_name) . ‘BModel‘;

        if
($is_new)

        {

            return
new $model_name($params, db());

        }

        $models[$model_hash] = new
$model_name($params, db());

    }

    return
$models[$model_hash];

}

使用static变量,当程序退出这段代码的时候,$model并不消失。这样减少了对象建时内存的消耗,有点类似单例模式。

比如这一段代码:

?





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

class
Model

{

    function  __construct()

    {

        echo ‘construct‘.‘<br>‘;

    }

}

function &m($model_name, $params
= array(), $is_new = false)

{

    static
$models = array();

    $model_hash = md5($model_name . var_export($params, true));

    if
($is_new || !isset($models[$model_hash]))

    {

        $model_name = ucfirst($model_name) . ‘Model‘;

        if
($is_new)

        {

            return
new Model();

        }

        $models[$model_hash] =  new
Model();

    }

    return
$models[$model_hash];

}

$s = m(‘db‘, array(‘name‘));

$s1 = m(‘db‘, array(‘name‘));

只执行了一次新建过程。

ecmall中static变量的使用-model模型代码设计,布布扣,bubuko.com

时间: 2025-01-31 06:46:28

ecmall中static变量的使用-model模型代码设计的相关文章

c++ 类与函数中static变量初始化问题(转)

首先static变量只有一次初始化,不管在类中还是在函数中..有这样一个函数: 1 void Foo() 2 { 3 static int a=3; // initialize 4 std::cout << a; 5 a++; 6 } 里的static int a=3只执行了一次.在main中调用Foo()两次,结果为34.将上面的函数改为 1 void Foo() 2 { 3 static int a; 4 a=3; // not initialize 5 std::cout <<

C#类中static变量用法分析

本文实例讲述了C#类中static变量用法.分享给大家供大家参考.具体分析如下: 先来看一段代码: 代码如下: using System; namespace Param { class Class1 { static int i = getNum(); int j = getNum(); static int num = 1; static int getNum() { return num; } [STAThread] static void Main(string[] args) { Co

在C#开发中如何使用Client Object Model客户端代码获得SharePoint 网站、列表的权限情况

自从人类学会了使用火,烤制的方式替代了人类的消化系统部分功能,从此人类的消化系统更加简单,加速了人脑的进化:自从SharePoint 2010开始有了Client Side Object Model ,我们就可以不用在服务器上开发SharePoint解决方案了,开发的方式更加多元化,这又加速了SharePoint 更大范围的应用. 现在,我们可以在任一台PC上安装Visual Studio 然后使用类似于 Object Model的模型来访问服务器上的列表.网站或是其它任何东东. 那么 ,如何使

java中static变量和方法的总结

转自:http://blog.csdn.net/haobo920/article/details/5921621 java中一切皆是对象 一个类中对象的定义一般都是分一下的两步来进行的:1/    A a;                                     //定义了一个类A的引用2/    a=new A("10","2563");        //真正地建立了对象a,也就是a指向了内存中一块连续的区域 也就是说通常我们说的创建了一个类,只

C#类中static变量

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 using   System;     namespace   Param     {     class   Class1     {     static   int   i   =   getNum();     int   j   =

Java多线程中static变量的使用

有时候,对于在多线程中使用static变量有没有冲突,是否存在安全问题不能十分的确定.在使用过程中有点含糊,总想找点时间好好追究一下,可总因开发项目时间的紧迫而搁浅.我想,没有做进一步的研究而拿项目繁忙说事,这是自己的借口吧! 鲁迅先生曾说过:"时间就像海绵里的水,只要愿挤,总还是有的".不管肿(怎)么说,这事还是要做的啊.如果越往后推,可能造成的潜在影响更大.这始终是个隐患,不能不除. 不是痛定思痛,而是认识到事情的重要性,就要开始行动了... ... 以上是个人的闲言碎语,不足而看

Java中static变量作用和用法详解

static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static修饰的成员变量和成员方法独立于该类的任何对象.也就是说,它不依赖类特定的实例,被类的所有实例共享. 只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们.因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象. 用public修饰的static成员变量和成员方法本质是

谨慎Asp.net中static变量的用法

在.Net平台下进行CS软件开发时,我们经常遇到以后还要用到某些变量上次修改后的值,为了简单起见,很多人都习惯用static来定义这些变量,我也是.这样非常方便,下一次调用某个函数时该变量仍然保存的是处理过的值,直接拿来用就可以了. 现在转入了BS软件开发,我们很自然地会沿用这种习惯.如在页面中统计某个按钮被按下的次数,先在类中OnClick事件的处理过程前定义一static变量times,则每次调用该按钮的OnClick事件时,令times增1即可,非常方便: [C#]: ... static

c++中static变量有什么用

主要有两点用途. 1.让一个变量长期有效,而不管其是在什么地方被申明.比如: int fun1() { static int s_value = 0; .... } 那么fun1不管在什么地方被调用,当函数退出后,s_value最后的值将一直会被系统保存(相当于一个全局变量),下次s_value再被用到时,也即当fun1()再次被调用时,s_value初始值将是最近被保存过的值(请注意s_value初始化操作只会被执行一次,即上述s_value =0 这个语句). 2.避免多个文件使用了相同的变