现在的位置: 首页 > 综合 > 正文

magento核心类Varien_Object

2013年08月29日 ⁄ 综合 ⁄ 共 1961字 ⁄ 字号 评论关闭

magento所有的数据模型都继承自类“Varien_Object”。这个类属于Magento的系统类库.

 

1

lib/Varien/Object.php

Magento模型的数据保存在“_data”属性中,这个属性是“protected”修饰的。父类“Varian_Object”定义了一些函数用来取出这些数据。我们上面的例子用了“getData”,这个方法返回一个数组,数组的元素是“key/value”对。【注:其实就是数据表中一行的数 据,“key”就是列名,“value”就是值】我们可以传入一个参数获取某个具体的“key”的值。

1

$model->getData();

2

$model->getData('title');

还有一个方法是“getOrigData”,这个方法会返回模型第一次被赋予的值。【注:因为模型在初始化以后,值可以被修改,这个方法就是拿到那个最原始的值】
 

1

$model->getOrigData();

2

$model->getOrigData('title');

getData("xxx")getXXX的效果是一样的

1

$customer = new Varien_Object();

2

$customer->setData(

 

3

array(

4

'name'  => 'Google',

 

5

'email' => 'lonely@gmail.com'

6

)

 

7

);

然后我们就可以这样来设置和获取属性值

1

$customer->getName();

2

$customer->getEmail();

 

3

$customer->getData("name");

4

$customer->addData("name",value);

 

5

$customer->setData("name",value);

6

$customer['name'];

 

7

$customer['name']=value;

上面都是等价的, 是不是很神奇?那继续往下看

“Varien_Object”也实现了一些PHP的特殊函数,比如神奇的“__call”。你可以对任何一个属性调用“get, set, unset, has”方法

01

/**

02

* Set/Get attribute wrapper

 

03

*

04

* @param   string $method

 

05

* @param   array $args

06

* @return  mixed

 

07

*/

08

public function __call($method, $args)

 

09

{

10

switch (substr($method, 0, 3)) {

 

11

case 'get' :

12

//Varien_Profiler::start('GETTER: '.get_class($this).'::'.$method);

 

13

$key = $this->_underscore(substr($method,3));

14

$data = $this->getData($key, isset($args[0]) ? $args[0] : null);

 

15

//Varien_Profiler::stop('GETTER: '.get_class($this).'::'.$method);

16

return $data;

 

17

case 'set' :

18

//Varien_Profiler::start('SETTER: '.get_class($this).'::'.$method);

 

19

$key = $this->_underscore(substr($method,3));

20

$result = $this->setData($key, isset($args[0]) ? $args[0] : null);

 

21

//Varien_Profiler::stop('SETTER: '.get_class($this).'::'.$method);

22

return $result;

 

23

case 'uns' :

24

//Varien_Profiler::start('UNS: '.get_class($this).'::'.$method);

 

25

$key = $this->_underscore(substr($method,3));

26

$result = $this->unsetData($key);

 

27

//Varien_Profiler::stop('UNS: '.get_class($this).'::'.$method);

28

return $result;

 

29

case 'has' :

30

//Varien_Profiler::start('HAS: '.get_class($this).'::'.$method);

 

31

$key = $this->_underscore(substr($method,3));

抱歉!评论已关闭.