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_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)
{
static $models = array();
$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并不消失。这样减少了对象建时内存的消耗,有点类似单例模式。

比如这一段代码:

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模型代码设计的更多相关文章

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

    首先static变量只有一次初始化,不管在类中还是在函数中..有这样一个函数: void Foo() { ; // initialize std::cout << a; a++; } 里的 ...

  2. java中static变量和方法的总结

    转自:http://blog.csdn.net/haobo920/article/details/5921621 java中static变量和方法的总结 java中一切皆是对象 一个类中对象的定义一般 ...

  3. Asp.net中static变量和viewstate的使用方法(谨慎)

    在.Net平台下进行CS软件开发时,我们经常遇到以后还要用到某些变量上次修改后的值,为了简单起见,很多人都习惯用static来定义这些变量,我也是.这样非常方便,下一次调用某个函数时该变量仍然保存的是 ...

  4. iOS中 static变量与全局、局部变量的区别 !

    static变量与全局.局部变量的区别 全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量.全局变量本身就是静态存储方式,静态全局变量当然也是静态存储方式. 这两者在存储方式上并 ...

  5. Java多线程中static变量的使用

    轉:https://blog.csdn.net/yy304935305/article/details/52456771 鲁迅先生曾说过:“时间就像海绵里的水,只要愿挤,总还是有的”.不管肿(怎)么说 ...

  6. 谨慎Asp.ne B/S架构t中static变量

    在.Net平台下进行CS软件开发时,我们经常遇到以后还要用到某些变量上次修改后的值,为了简单起见,很多人都习惯用static来定义这些变量,我也是.这样非常方便,下一次调用某个函数时该变量仍然保存的是 ...

  7. 慎重Asp.net中static变量的使用方法

    在.Net平台下进行CS软件开发时,我们常常遇到以后还要用到某些变量上次改动后的值,为了简单起见,非常多人都习惯用static来定义这些变量,我也是.这样非常方便.下一次调用某个函数时该变量仍然保存的 ...

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

    static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念. 被static ...

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

    自从人类学会了使用火,烤制的方式替代了人类的消化系统部分功能,从此人类的消化系统更加简单,加速了人脑的进化:自从SharePoint 2010开始有了Client Side Object Model ...

随机推荐

  1. MFC之进度条CProgressCtrl

    一.成员函数简介 1.create()针对不是通过资源文件上拖拉进度条控件生成的进度条,需要用此函数创建一个. 2.SetRange()设置进度条的起始值和终止值. 3.SetPos()设置进度条的当 ...

  2. python pickle

    >>> import pickle >>> m_list=[',2,'asa'] >>> m_list [', 2, 'asa'] >> ...

  3. re.search 和 re.match

    相同点: 都返回找到的第一个匹配对象 >>> import re >>> m = re.search('(\w+) (\w+)', 'aaa bbb ccc ddd ...

  4. postgresql 中replace 函数

    select replace(字段名,E'\r','') from 表名 where 字段名 like E'%\r%';:  查看修改后结果,并不真实修改数据库 update 表名 set 字段名=r ...

  5. linux——常用命令与脚本

    linux常用命令 --文件管理pwd --查看当前目录cd --切换当前目录ls --列出当前目录下的所有文件touch --创建文件mkdir --建立目录rmdir --删除空目录rm --删除 ...

  6. phpcms

    phpcms 织梦 帝国cms

  7. web应用 http 响应 url uri

    动态web  应用结构 WEB-INF --classes --lib web.xml     响应:   url   uri

  8. ACM/ICPC 之 卡卡的矩阵旅行-最小费用最大流(可做模板)(POJ3422)

    将每个点拆分成原点A与伪点B,A->B有两条单向路(邻接表实现时需要建立一条反向的空边,并保证环路费用和为0),一条残留容量为1,费用为本身的负值(便于计算最短路),另一条残留容量+∞,费用为0 ...

  9. css垂直居中 两种方法

    在前端面试的时候我们经常会被问道怎样使一个元素在页面垂直居中呢,这也是一个老生常谈的问题了. 解决的方法基本都是使用定位来实现 div{display: fixed;left: 50%;top: 50 ...

  10. python初学杂记

    python常用命令: 1.python 或者 python3  打开交互式python解释器 2.python hello.py   通过命令提示符运行python脚本 交互式python解释器常用 ...