您如何确定Magento对象提供的所有可用参数?

时间:2012-12-06 21:30:33

标签: php magento magic-methods

以下是该方案: 您正在使用magento中的某个模型,并且您想知道哪些方法可用于检索magento中对象的各种参数。

让我们举个例子:

$order = `Mage::getModel('sales/order')->loadByIncrementId($session->getLastRealOrderId());`

在这个例子中,我们正在处理订单对象。

通过搜索各种主题,我发现此特定对象有许多不同的方法,例如:

getCustomer()
getCustomerName()
getGrandTotal()
getId()

我将假设(可能不正确)前3个示例方法实际上是在mage_core_model_sales_order类中定义的,或者是它扩展的类之一 getId()是一个特例

这是一种自动方法,与__call()魔术方法一起使用,即使在任何地方都没有定义方法,也可以从对象返回数据。

请解释Magento自动化方法的命名约定

确定给定模型或集合中可用的所有可用自动方法的最简单方法是什么。

2 个答案:

答案 0 :(得分:2)

简而言之(因为这是在互联网上的其他各个地方记录的),魔术方法用于设置和获取数据。这些电话

$this->setSomeThing('value');
$this->getSomeThing();

等同于这些电话

$this->setData('some_thing','value');
$this->getData('some_thing');

字符串'some_thing'是数据键。要使用魔术方法设置和获取数据,这个键是CamelCased为'SomeThing'。

您可以通过对'getData'的无参数调用来查看所有数据属性(因此派生魔术方法)

var_dump( $this->getData() );

如果您没有使用var_dump,请注意xDebug,并且许多Magento对象太大和/或太圆而无法完全显示。如果您遇到这个问题,可以通过

查看密钥
var_dump( array_keys($this->getData()) );

这就是Magento的所有神奇方法 - 获取和设置数据。

使用varien对象来解决这个问题,varien对象是Magento中所有Models和Blocks继承的对象。

$o = new Varien_Object;
$o->setData('foo','bar');
var_dump($o->getData('foo'));
var_dump($o->getFoo('foo'));
var_dump($o->getData());

要记住的最后一件事:如果对象的类具有与魔术方法同名的方法,则忽略魔术方法。有时,确定某些东西是魔术方法还是真正方法的唯一方法是查看类定义。

答案 1 :(得分:0)

如果您需要以编程方式确定PHP中类的可用方法,可以使用多种方法。

如果您没有该类的实例,但可能只是类名,您可以使用PHP的反射功能:http://php.net/manual/en/book.reflection.php

或者,如果您实际拥有该类的实例,则可以在实例上使用get_class_methods()来获取当前作用域中实例上可用的方法列表(包括已定义的魔术方法)。