Magento如何创建动态函数


How does Magento create dynamic functions?

谁能告诉我Magento是如何创建动态函数的?例如,对于产品信息,我们调用:

$product = Mage::getModel('catalog/product')->load(29);

$product->getData()以数组格式返回所有数据。但是我们可以从单个函数中获取相同的信息,例如:

$product->getSkuId()
$product->getProdId()
$product->getName()

谁能告诉我Magento是如何创建这些动态函数的?

Magento正在使用__call魔术方法。当你试图调用一个方法,而这个方法在那个类中并不存在,如果你在你的类中定义了__call方法,__call方法被调用,Magento取实际请求的方法的名字,并调用另一个方法来处理这个请求,为你获取特定的东西。

编辑

所有的模型类都继承自Varien_Object类(见图),__get__set__call等神奇方法在Varien_Object类中定义,并将由Varien_Object类继承的类使用。你可以在/magento_installation_diretctory/lib/Varien/Object.php找到这个类。

查看Varien_Object类的源代码

可能通过使用__call