Magento-getEmail()在哪里定义?

时间:2018-07-24 09:31:03

标签: php magento-1.8 magic-methods

您可以使用以下代码查找登录用户的电子邮件:

getEmail()

如何找出app\code\core\Mage\Customer\Model\Resource\Customer.php的定义位置?

我在getEmail()中进行了搜索,但是没有名为Varien_Object的函数。

我只发现了这个:

_beforeSave method definition

因此我使用NetBeans进行了追溯,并在lib\Varien\Object.php中找到了getEmail()的定义。

但是其中也没有功能public function getEmail()

我在整个项目中搜索了字符串$ grep -iR "public function getEmail()" app/code/core/Mage/Catalog/Block/Product/Send.php: public function getEmail() app/code/core/Mage/Newsletter/Model/Subscriber.php: public function getEmail() app/code/core/Mage/Sendfriend/Block/Send.php: public function getEmail() app/code/core/_193_Mage/Catalog/Block/Product/Send.php: public function getEmail() app/code/core/_193_Mage/Newsletter/Model/Subscriber.php: public function getEmail() app/code/core/_193_Mage/Sendfriend/Block/Send.php: public function getEmail() app/code/_core/Mage/Catalog/Block/Product/Send.php: public function getEmail() app/code/_core/Mage/Newsletter/Model/Subscriber.php: public function getEmail() app/code/_core/Mage/Sendfriend/Block/Send.php: public function getEmail() lib/Payone/Api/Request/Parameter/Authorization/PersonalData.php: public function getEmail() lib/Payone/Api/Request/Parameter/CreateAccess/PersonalData.php: public function getEmail() lib/Payone/Api/Request/Parameter/ManageMandate/PersonalData.php: public function getEmail() lib/Payone/Api/Request/Parameter/Vauthorization/PersonalData.php: public function getEmail() lib/Zend/Gdata/App/Extension/Person.php: public function getEmail() lib/Zend/Gdata/Extension/Who.php: public function getEmail() lib/Zend/Service/ReCaptcha/MailHide.php: public function getEmail() lib/Zend/View/Helper/Gravatar.php: public function getEmail()

这是结果:

{{1}}

1 个答案:

答案 0 :(得分:3)

您将找不到getEmail()定义,因为它不存在。

正如您在共享的代码段中所看到的,$customerVarien_Object的实例。该类在lib\Varien\Object.php中定义。

如果您在那儿偷看,您会发现该方法也未定义...但是那是因为无论好坏,Magento都利用了PHP的magic methods

在此$customer实例上调用不存在的方法时,将执行__call()

这是Varien_Object::_call()的方法定义:

/**
 * Set/Get attribute wrapper
 *
 * @param   string $method
 * @param   array $args
 * @return  mixed
 */
public function __call($method, $args)
{
    switch (substr($method, 0, 3)) {
        case 'get' :
            $key = $this->_underscore(substr($method,3));
            $data = $this->getData($key, isset($args[0]) ? $args[0] : null);
            return $data;
        case 'set' :
            $key = $this->_underscore(substr($method,3));
            $result = $this->setData($key, isset($args[0]) ? $args[0] : null);
            return $result;
        case 'uns' :
            $key = $this->_underscore(substr($method,3));
            $result = $this->unsetData($key);
            return $result;
        case 'has' :
            $key = $this->_underscore(substr($method,3));
            return isset($this->_data[$key]);
    }
    throw new Varien_Exception("Invalid method ".get_class($this)."::".$method."(".print_r($args,1).")");
}

从这里开始,逻辑非常简单。由于$method将是getEmail,因此将执行开关的第一个分支,并且$key将从方法名称中获取(跳过前三个字符,因为它们必须为“ get”,“ set”,“ uns”或“ has”),在这种情况下,它将变成“ email”。