2010-12-14 69 views
2
public function __construct($template = '', array $data = array()) 
{ 
    if ($template !== '') { 
     $this->setTemplate($template); 
    } 
    if (!empty($data)) { 
     foreach ($data as $name => $value) { 
      $this->$name = $value; 
     } 
    } 
} 

从devshed复合视图教程(http://www.devshed.com/c/a/PHP/PHP-Composite-View-Design-Pattern-Introducing-的密钥-概念/ 1 /)。无论如何,我有点混淆,$this->$name = $value;声明。PHP代码:使用此关键字

我通常使用$this作为类的属性和/或在上述类中调用类的方法时。另外声明有两个$'s。这很奇怪!那么$this->$name = $value是指在foreach循环中定义的$name?如果有的话可以解释这个用法或背后的逻辑吗?

预先感谢您。

回答

2

$this->$name = $value 

的$ name设置定义为$变量名$值

例如如果$名=“用户”,那么这是相当于

$this->user = value; 

这种类型的语法经常被用来(如上所示)在foreach循环来设置对象值。注意:每次调用$ this-> variable_name时,如果'variable_name'尚未定义为对象的属性,则调用magic __set函数,并将'variable_name'作为参数传递。

http://php.net/manual/en/language.oop5.overloading.php

+0

这里的权利,但只有真实,如果'名称'不存在作为不动产。在这种情况下,不会调用魔术属性。 – KingCrunch 2010-12-14 09:35:35

+0

@KingCrunch - 是的,这是真的,将编辑我的回复,使其更清晰 – mrwooster 2010-12-14 09:38:47

+0

我想我明白了。在搞乱了AbstractView类之后。看来$ this - > $ name是指由__set动态创建的$ name。所以如果说,类属性没有在类中显式定义,用户基本上可以这样做:$ foo = new AbstractView; $ foo-> bar ='stuff';因此调用__set函数并为abstractview类创建一个bar类属性。 $ this => $ name = $ value语句指的是$ name变量,一个占位符,用于通过AbstractView类定义的其他魔术方法,因此额外的$。非常感谢! – mythicalprogrammer 2010-12-14 18:21:57

0

$名字中含有name of property没有别的

,而不是只提的属性中静态它指向包含的属性名称

$name='someproperty'; 

$this->$name; 
0

让尽可能假设变量$ name的当前值是“foo”。 然后$ this-> name将返回与$ this-> foo完全相同的名称。

+0

你的意思是'$ this - > $ name'。而不是*返回*,而是*参考*。 – 2010-12-14 09:41:45

1

我没有去你发布的链接,但阅读代码。

我给你举个例子:

// If $data has the following values 
array(
    'firstname' => 'my first name', 
    'surname' => 'my surname' 
) 

的代码将有“姓”和“姓”作为类的公共属性。 $this->firstname的值将是'我的名字'。 $this->surname的值将是'我的姓氏'。