magento中单例模式的变形实现

2023-05-16

单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。

单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

一个典型的php单例模式实现如下:

<?php
/**
*  php singleton pattern
*  @author   newjueqi
*  @modify   2011-12-30
*  @website  http://blog.csdn.net/newjueqi
*/
Class Test{
	
        private function __construct(){}
        private function __clone(){}
        static private $_instance=NULL;
                
        //get single object
        public function getInstance(){

	        if( is_null( self::$_instance ) || !isset(self::$_instance) ){
	           self::$_instance=new Test();
	        }
	        
	        return self::$_instance;
        }
        
        public function debug(){
        	echo "hello";
        }
}

Test::getInstance()->debug();
Test::getInstance()->debug();

但这种方法有一个缺点,对于某个类,如果有时候我需要的是单个实例,有时候需要的是不同的实例,那怎么办呢?

对于以上的问题,在Magento中,由于Class Mage 是作用在整个request 过程,基于Mage的特点,Mage提供了两个static 方法: getModel() 和 getSingleton()

 getModel():每次获取的是是不同的实例

 getSingleton():每次获取的是是同一的实例

详细的代码如下:

    /**
     * Retrieve model object
     *
     * @link    Mage_Core_Model_Config::getModelInstance
     * @param   string $modelClass
     * @param   array $arguments
     * @return  Mage_Core_Model_Abstract
     */
    public static function getModel($modelClass = '', $arguments = array())
    {
        return self::getConfig()->getModelInstance($modelClass, $arguments);
    }

    /**
     * Retrieve model object singleton
     *
     * @param   string $modelClass
     * @param   array $arguments
     * @return  Mage_Core_Model_Abstract
     */
    public static function getSingleton($modelClass='', array $arguments=array())
    {
        $registryKey = '_singleton/'.$modelClass;
	//检测当前的对象是否已经存在,如果存在则取出来
        if (!self::registry($registryKey)) {
	    //self::getModel的用途是实例化对象,然后把对象通过self::register()保存,
            self::register($registryKey, self::getModel($modelClass, $arguments));
        }
        return self::registry($registryKey);
    }

所以在一次请求过程中,每次使用Mage::getModel('XXX') 获得的都是不同的object,每次使用Mage::getSingleton('XXX') 获得的都是同一的object

[文章标题] magento中单例模式的变形实现

[文章作者]曾健生

[作者邮箱]zengjiansheng1@126.com

[作者QQ]190678908

[博客]  http://blog.csdn.net/newjueqi
















本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

magento中单例模式的变形实现 的相关文章

  • 在 Magento 中以编程方式创建 CMS/页面

    我看到了下面这个帖子的回复Magento 静态 CMS 块存储在哪里 https stackoverflow com questions 4932652 where are magento static cms blocks stored关
  • Magento:设置集合限制

    我试图找出的问题是如何对集合设置限制 我在 Google 上找到的答案仅适用于具有 setPage pageNum pageSize 的目录 这对任何其他集合都不起作用 请参阅下面的答案 做这件事有很多种方法 collection Mage
  • 如何从magento前端上传产品图片

    我正在尝试在管理面板中上传产品的图片 它工作正常 但现在我想在前端上传产品的图像 我的意思是客户可以从前端上传产品的图像 那么这怎么可能呢 首先在媒体 导入中上传图像 if isset FILES file name FILES file
  • 如何在 Magento 中更改订单起始编号

    有没有办法在 Magento 中更改订单起始编号而不更改已有的订单号 我只想为所有新订单设置 170000xxxx Thanks Look in eav entity store并找到increment last id 更新此号码 确保en
  • Magento 1.9 注册后重定向客户

    我想在 Magento 1 9 中成功注册后将所有客户重定向到自定义页面 我已经尝试了很多事情 首先 我成功地覆盖了核心客户帐户控制器 我尝试自定义以下操作 创建后动作 successProcessRegistration welcome客
  • 在 magento connect 中安装任何扩展时出现错误

    我的商店里有 magento 社区版 7 1 我尝试使用 magento 商店安装扩展 但所有类型的扩展都出现这样的错误 Community Dropifi Dropificontactwidget 无法解析主机 connect20 mag
  • Magento 购物车未更新阿拉伯语商店视图中的数量

    我在 Magento 1 8 1 安装中遇到以下问题 我有两种商店视图 英语 默认 和阿拉伯语 在英文商店视图中 如果我将产品添加到购物车 我可以通过在数量框中输入新数量并单击更新购物车来修改数量 这会更改数量和总数 但是 当我切换到阿拉伯
  • 无法登录 Magento 管理员

    我在登录我们的一个临时站点上的 Magento 管理面板时遇到问题 它在我们的 webdev 服务器上 100 工作 不久前在临时服务器上也工作得很好 我做了一些研究 大多数人认为这与在本地主机上运行 Magento 以及浏览器不为域名中没
  • 在购物车页面上显示分级定价

    如果我在这个页面上 http 结账 购物车 对于购物车中的产品 我想显示分级定价 与商品页面上显示的定价相同 如果有 我的尝试是添加
  • 将 css 添加到 Magento 模板文件的 head 中

    我想在 magento 中的模板 phtml 文件的标签内添加一个 CSS 文件 是否可以 这样做是有原因的 CSS 文件名是动态的 所以直到模板执行时我才知道 可以这样做吗 要在加载布局之后 渲染布局之前从控制器添加 CSS 文件 您需要
  • 如何覆盖 app/code/core/Mage/Core/functions.php 中的 Magento 函数

    我需要重写此文件中的一个函数 应用程序 代码 核心 Mage Core functions php 问题是 它是如此核心 以至于没有与之关联的类 可能是因为 Core 甚至不是一个模块 有谁知道如何在没有类的情况下覆盖文件中的函数 任何帮助
  • 如何自定义 magento onepage 结账表单

    我正在使用 Magento 1 5 1 0 我想在单页结账表单中自定义地址块 我想删除 传真 输入字段并将 区域 下拉列表放在国家 地区 下拉列表 下方 这个形式是在哪里定义的 亲切的问候 伯蒂 导航到您的主题文件夹 默认文件位于以下位置
  • 一旦我们点击取消按钮,文本字段就会隐藏

    我们正在使用 magento 多供应商网站 我们正在使用以下代码来更新和取消价格 但是一旦我们单击 取消 按钮 文本字段就会隐藏 PHTML span class label pro status span
  • reindex 目录 URL 在 magento 中重写永无止境

    我已使用自定义导入配置文件将 6K 类别和 16K 产品导入到 magento 当我尝试重新索引时 除了 目录 URL 重写 之外的所有内容都正常工作 该 目录 URL 重写 一直显示 正在处理 但从未完成 日志和异常文件不显示任何内容 我
  • Magento:每个订单限制类别中的 3 个产品

    我正在尝试在 Magento 中设置一个示例产品类别 允许人们每次购买时最多选择 3 个免费样品 但如何限制每个订单仅从该类别中选择 3 个样品 EDIT 这是 app code local MagePal LimitCartProduct
  • Magento 1.8 - 高级搜索不起作用

    我在最新版本的 magento 中发现了一个奇怪的错误 高级搜索工具无法正常工作 我做了什么 安装 magento 的新副本 在管理页面添加了一个名为 测试 1 的产品 重新索引全部 清除所有缓存 At the frontend page
  • 如何轻松调试布局 Xml 警告/错误?

    我陷入了这个错误 Warning simplexml load string Entity line 46 parser error Comment not terminated in lib Varien Simplexml Config
  • magento 删除管理菜单项

    在magento中 是否可以删除管理中的菜单项 我有一个新模块 并将评论和评级拉到一个新部分 我不反对将它们也留在目录部分 但如果可能 并且干净 我想将其从那里删除 将下一行添加到扩展 config xml 文件
  • Magento EE FPC 中的打孔法师_目录_块_产品_价格

    我花了很长时间找出代码 参数来为Mage Catalog Block Product Price块在magento中打孔全页缓存 我可以在第一次加载页面时显示价格 但是当缓存 id 是唯一的时 它不会正确呈现价格 当它应该被缓存时 它会正确
  • 如何从 Magento One Page Checkout 获取发布数据?

    为了在 Magento Checkout 中添加客户评论字段 我在相应的模板文件中添加了一个文本字段 并使用如下观察器将评论添加到订单中 comment strip tags Mage app gt getRequest gt getPar

随机推荐

  • magento :如何在后台的form中添加内容可变的select filed

    如下图 xff1a 在product form中添加了一个attribute spot spotter xff0c 这个attribute可以选择某个已注册的用户 注意了 xff0c 由于这个attribute 的内容是动态变化的 xff0
  • STM32好找工作,所以学linux错了吗?

    不知道各位朋友有没有发现 xff0c 公众号改版了 xff0c 现在的推送规则已经不一定是按照时间顺序了 xff0c 有一些小伙伴甚至几天收不到消息 xff0c 要点进去公众号主页才能看到 所以 xff0c 为了账号不会从您的订阅表里面消失
  • MyISAM 与InnoDB 数据表类型区别

    http blog sina com cn s blog 5a8b8eb80100stge html InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型 xff0c 这两个表类型各有优劣 xff0c 视具体应用而定 基本
  • 手把手教你把Vim改装成一个IDE编程环境(图文)

    http blog csdn net wooin article details 1858917
  • Mysql-Master与Slave配置

    http database ctocio com cn 291 12219291 shtml 今天在ubuntu下进行了mysql的Master和Slave的简单配置 xff0c 基本上属于hello world的难度 xff0c 但是看起
  • 上海回来的一点感想

    1 上海不是一般的冷 xff0c 是非常冷 xff0c 上海回来的时候在上海都要穿毛衣了 xff0c 但广州还是短袖衣服 2 在上海足足吃了两个月的 大娘水饺 xff0c 几乎把那里的水饺品尝了一次 xff0c 结果发现还是素的水饺好吃 x
  • Linux日知录(常用问题笔记)

    http blog csdn net yizhu2000 article details 7068842 0 序言 日有一知 当有一录 自09年来 工作所需 接触开源平台 对Linux常有涉猎 其间问题 记录在案 虽为敝帚 不敢自珍 所记条
  • ubuntu postfix安装问题及解决办法

    http hi baidu com truetruelove blog item adf3099711b0f76454fb9653 html 从8月22日凌晨1点多熬到早上9点半 xff0c 终于搞定发信收信 实在郁闷 xff0c 刚接触p
  • Ubuntu smtp验证配置

    http blog itpub net post 11939 459273 在配置sendmail 的smpt验证时 xff0c 碰到了不少麻烦事 xff0c 最后总算搞定了 有时只是一些简单的操作 xff0c 却是因为没有文档 xff0c
  • Send mail using Gmail SMTP in Magento

    http blog goods pro com 486 replace mta with gmail smtp in magento 我能想到的也是大部分人能想到的 我想用gmail smtp server代替magento内置的sendm
  • magento 中查看执行的sql语句

    在开发的时候 xff0c 经常需要看到magento所生成的sql语句 xff0c 一般来说分为以下的两种情况 xff1a xff08 1 xff09 只需要查看某个sql语句 xff1a collection of products 61
  • 如何学习技术?

    http blog csdn net heiyeshuwu article details 6920880 文章来自baidu NY 同学的邮件 xff0c 整理发出 1 想学的技术非常多 xff0c 该怎么办 xff1f 区分重点 xff
  • 终于等到你!2020年电子设计竞赛来了!

    刚刚 xff0c TI官方发布了电赛的通知 xff0c 如下 关于支持合作赛区 举办2020年TI杯 省级大学生电子设计竞赛的通知 根据部分合作赛区的要求和倡议 xff0c TI从2008年开始支持合作赛区举办TI杯省级大学生电子设计竞赛
  • mysql导入数据时的外键约束问题

    当导入数据的时候 xff0c 经常会出现报告外键错误 xff0c 这是由于table中有外键约束 xff0c 但导入数据时数据可能还没完整 xff0c 所以会出现这样的错误 这个问题可通过FOREIGN KEY CHECKS解决 xff0c
  • Ubuntu7.10 vi/vim搭建超级c/c++编程环境

    http blog chinaunix net u 30958 showart 507405 html 在没有怎么太深的接触vi vim之前 xff0c 也曾经搞不懂为什么有好多linux下的程序员说vi vim是个超级的代码编辑器或者编译
  • Vim 复制粘贴探秘

    http www cnblogs com mo beifeng archive 2011 09 07 2170011 html Vim作为最好用的文本编辑器之一 xff0c 使用vim来编文档 xff0c 写代码实在是很惬意的事情 每当学会
  • mysql developer 知识结构思维导图(多图 )

    通过了Sun Certified MySQL Developer SCMDEV xff0c 最大的感触就是对mysql的知识进行了一次全面的梳理 xff0c 而且狠狠地画了N张思维导图 xff0c 过了一把瘾 注意 xff1a 有可能在浏览
  • mysql性能的检查和调优方法

    来源 xff1a http www sudone com linux mysql debug html 我一直是使用mysql这个数据库软件 xff0c 它工作比较稳定 xff0c 效率也很高 在遇到严重性能问题时 xff0c 一般都有这么
  • gvim中文乱码解决方案

    http www cnblogs com login007 archive 2011 09 14 2176764 html 这东西没必要记在脑子里面 xff0c 还是贴这里备用把 set fileencodings 61 utf 8 gb2
  • magento中单例模式的变形实现

    单例模式确保某一个类只有一个实例 xff0c 而且自行实例化并向整个系统提供这个实例 这个类称为单例类 单例模式的要点有三个 xff1b 一是某个类只能有一个实例 xff1b 二是它必须自行创建这个实例 xff1b 三是它必须自行向整个系统