Php 如何确定Magento对象的所有可用参数?

Php 如何确定Magento对象的所有可用参数?,php,magento,magic-methods,Php,Magento,Magic Methods,以下是场景: 您正在使用magento中的某些模型,并且希望知道哪些方法可用于检索magento中对象的各种参数 让我们做一个例子: $order = `Mage::getModel('sales/order')->loadByIncrementId($session->getLastRealOrderId());` 在本例中,我们使用的是order对象 通过对各种主题进行搜索,我发现有许多不同的方法可用于此特定对象,例如: getCustomer() getCustomerNam

以下是场景: 您正在使用magento中的某些模型,并且希望知道哪些方法可用于检索magento中对象的各种参数

让我们做一个例子:

$order = `Mage::getModel('sales/order')->loadByIncrementId($session->getLastRealOrderId());`
在本例中,我们使用的是order对象

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

getCustomer()
getCustomerName()
getGrandTotal()
getId()
我将假设(可能是错误的)前3个示例方法实际上是在mage_core_model_sales_order类或它扩展的一个类中定义的 getId()是一个特例

它是一种自动方法,与_call()magic方法一起工作,从对象返回数据,即使该方法未在任何地方定义

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


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

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

如果你没有;我们没有该类的实例,但可能只有类名,您可以使用PHP的反射功能:

或者,如果您实际拥有该类的实例,您可以在该实例上使用
get\u class\u methods()
,从当前范围获取实例上可用的方法列表(包括已定义的魔术方法)。

简而言之(因为这在internet上的其他地方都有文档记录),神奇的方法是用来设置和获取数据的。这些电话

$this->setSomeThing('value');
$this->getSomeThing();
相当于这些电话

$this->setData('some_thing','value');
$this->getData('some_thing');
字符串“some\u thing”是一个数据键。用一种神奇的方法来设置和获取数据是非常重要的,这把钥匙被塞进了“某物”中

通过对“getData”的无参数调用,您可以查看所有的数据属性(并由此派生神奇的方法)

var_dump( $this->getData() );
如果未使用
xDebug
,并且许多Magento对象太大和/或太圆,无法完全显示,请小心使用
var\u dump
。如果你遇到了这个问题,你可以用鼠标偷看一下钥匙

var_dump( array_keys($this->getData()) );
这就是Magento中的所有神奇方法——获取和设置数据

使用varien对象(Magento中所有模型和块都从该对象继承)来处理此问题

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

最后要记住的一件事是:如果对象的类中定义了一个与magic方法同名的方法,那么magic方法将被忽略。有时,要确定某个方法是神奇的方法还是真实的方法,唯一的方法就是查看类定义

我更喜欢
Zend\u Debug::dump(数组键($object->getData())
,因为它很好,而且是自动格式化的。这可能是在Magento站点上工作时可以使用的最实用的语句。是否有一个直接的前言资源,可以在每个对象的基础上定义这些“通常”填充的参数?这听起来可能很懒,但我不希望每次我想看一看可用的东西时都写一些内置的($something->getData())。有什么建议吗?@ajameswolf据我所知,没有这样的建议。我认为事情变化太频繁,太可配置(产品),人们觉得这是值得的。