在Magento,如果我们想从模型调用函数,那么我们更喜欢使用 法师:: getModel(' MODULENAME /的className') - >使用functionName();但我们也可以使用Namespace_ModuleName_Model_ClassName :: FunctionName()直接实现它;
我知道根据Magento我们必须使用getModel,但是我检查了某人使用直接Php方法来调用函数并说"这是对Mage :: getModel方式的首选,因为我们不需要为一个简单数组实例化整个模型。如果我们使用Mage :: getModel表达式,模型首先需要在执行“functionname”方法之前实例化(执行其构造函数),该方法只返回一个数组并且没有复杂的逻辑。这样它的速度更快,并且还限制了返回步骤数组所执行的逻辑。"
请建议使用直接调用功能的首选方式和优点/缺点。
答案 0 :(得分:3)
如果您正在调用这样的方法:Namespace_ModuleName_Model_ClassName::FunctionName()
,那么您假设这是一个静态方法。只能像这样调用静态方法。
请参阅此处a good write-up on when to use static methods。我们的想法是静态方法是无状态的,并且不需要对象的上下文才能运行。在这种情况下,您不需要实例化对象,因为静态方法不应该调用实例方法,因此他们不会使用$ this关键字。
在 Magento 中,情况略有不同,因为getModel
为您提供了一个非常重要的功能:类重写。
如果你执行Mage::getModel('moduleName/className')
,Magento会将此名称解析为PHP类,使用它从config.xml重写类。这意味着您可以在local
命名空间中重写核心或社区类,Magento将在代码中的任何位置使用您的类,而不是旧类。
记住这一点,您可以轻松地看到使用静态方法并直接调用它们的缺点:您将无法重写它们!
你唯一的'清洁'解决方案如果要修改静态方法中的代码,请复制app/code/local/Original/Module
中的整个文件;多次这样做会使升级变得困难。