2014-02-20 33 views
1

我很難理解幾段代碼。希望你能幫助我解決這些新手問題。需要說明這些特定的PHP類如何工作

class ChatBase{ 

    // This constructor is used by all the chat classes: 

    public function __construct(array $options){ 

     foreach($options as $k=>$v){ 
      if(isset($this->$k)){ 
       $this->$k = $v; 
      } 
     } 
    } 
} 

ChatUser只有兩個空的受保護變量,它擴展了chatBase。 Instatiation:

$user = new ChatUser(array(
     'name'  => $name, 
     'gravatar' => $gravatar 
    )); 

我的問題是什麼構造函數部分呢?爲什麼我們要交換這些關鍵/值?

另一個問題:

class DB { 
    private static $instance; 
    private $MySQLi; 

    public static function init(array $dbOptions){ 
     if(self::$instance instanceof self){ 
      return false; 
     } 

     self::$instance = new self($dbOptions); 
    } 

基本上我有很難理解其中這來自於新的自我($ dbOptions);什麼是'自我'在這種情況下是指?

我怎麼能console.log自我或任何其他變量的值,當在課堂上?非常感謝您解決這個問題。

回答

0

我們的評論如下代碼:

public function __construct(array $options){ 

創建__constructor(即創建使用new Class()類的新實例時自動執行功能),並接受已是一個數組參數,並且我們保存到$options


foreach($options as $k=>$v){ 

迭代通過$options並設置$k的關鍵(如namegravatar)的值,並設置$v的值($name$gravatar在initalizer)


 if(isset($this->$k)){ 

檢查當前班是否有名爲的房產(關鍵)。例如。 「這個班有一個名爲name的房產嗎?」?


  $this->$k = $v; 

如果此屬性存在,將其設置爲值(例如$name):

0

在你的第一個問題,$this->$k = $v;$this創建新的屬性。

While循環時,$k將是'name'$v將是$name$this->$k$this->name相同,因此它將$this->name設置爲$name

在第二個問題中,self指的是當前類。所以,new self($dbOptions)就像在做new DB($dbOptions)

1

1)

構造函數允許通過實例化的對象時提交的關聯數組給構造來設置實例屬性(從已定義的那些「白名單」)。


2)

有在PHP中的console.log沒有這樣的事情,但你可以使用echovar_dump代替。在這種情況下,self指的是這個類。