2011-07-06 52 views
1

我讀一些代碼,看起來像這樣:爲什麼要在__construct而不是var列表中定義實例var的類型?

Class_Menu.php:

<?php 
    class Menu { 
     private $label; 
     private $link; 
     private $args; 

     function __construct($label, $link, $args=array()) { 
      $this->label=$label; 
      $this->link=$link; 
      $this->args=$args; 
     } 
... 

$args是如何定義爲__construct的數組。爲什麼人會選擇這種方法,而不是在var列表定義$args

<?php 
    class Menu { 
     private $label; 
     private $link; 
     private $args=array(); 

     function __construct($label, $link, $args) { 
      $this->label=$label; 
      $this->link=$link; 
      $this->args=$args; 
     } 
... 

回答

6

在第一個例子,$args是可選的。對於$label$link只能使用2個參數調用構造函數,而將$args定義爲空數組。

在第二個示例中,$args參數是必需的。

(意見):我會在構造函數中留下$args = array(),並且在聲明屬性時,可以很容易地一目瞭然地告訴var $ args是什麼類型。

<?php 
    class Menu { 
     private $label; 
     private $link; 
     private $args = array(); 

     function __construct($label, $link, $args=array()) { 
      $this->label=$label; 
      $this->link=$link; 
      $this->args=$args; 
     } 
+1

若要更進一步,請使用類型提示。 '__construct($ label,$ link,array $ args = array())' – BoltClock

+0

@BoltClock:爲什麼要使用類型提示?你有什麼收穫?只是好奇。 – PeeHaa

+1

@PeeHaa:[Typehint(PHP手冊)](http://php.net/manual/en/language.oop5.typehinting.php)將確保只有數組傳遞給該參數。否則會出現異常。 – hakre

2

這只是使$args可選。如果構造函數的名稱爲new Menu('a', 'b'),則args將被定義爲一個空數組,並且不會引發有關缺少參數的錯誤。

相關問題