2013-02-09 2 views
0

При чтении о конструкторах PHP я натолкнулся на приведенный ниже пример на странице this.Параметры конструктора PHP путаницы

<?php 
    class MyClass { 
     // use a unique id for each derived constructor, 
     // and use a null reference to an array, 
     // for optional parameters 
     function __construct($id="", $args=null) { 
      // parent constructor called first ALWAYS 
      /*Remaining code here*/ 
     } 
    } 

Я не могу понять, почему $id установлен в "" и $args к null. Когда я буду использовать что-то вроде этого? Почему мы не можем использовать function __construct($id, $args) {.

+1

Когда вы создаете экземпляр класса MyClass, вы можете либо создать экземпляр с параметром, либо без них .. когда вы делаете $ myclass = new MyClass() .. он примет те параметры по умолчанию $ id = "" и $ args = null .. но когда вы создаете экземпляр $ myclass = new MyClass (2, array (1,2)), он примет $ id = 2 и $ args = array (1,2) ... – Dinesh

ответ

4

Это default arguments. Когда они не будут предоставлены вызывающим абонентом, они будут установлены на эти значения. В противном случае он будет установлен на значения вызывающего абонента.

+0

Спасибо за помощь. Исходя из фона Java, это было немного иначе. – rgamber

+1

@rgamber: В Java такие же вещи могут быть достигнуты более подробно путем перегрузки конструктора и вызова другого конструктора изнутри этого конструктора. – icktoofay

3

Для того, чтобы были указаны как $x = MyClass("12", array(1, 2, 3)), так и $y = MyClass().

Без этих аргументов по умолчанию MyClass() приведет к ошибке.

3

Это значения аргументов по умолчанию.

Это означает, что вы можете вызвать конструктор без передачи каких-либо параметров, а затем конструктор добавит эти значения к аргументам.

Таким образом, вы можете создать экземпляр вроде этого:

$mc = MyClass(); 

Так что, когда это может быть полезно? Предположим, у вас есть класс, который обычно имеет те же параметры, скажем, у вас есть класс Door, который обычно имеет тип normal. Затем вы можете опустить передачу этого значения, но иногда вам нужен Door, который имеет тип сейфа, а затем вы хотите передать его. Для уточнения:

class Door { 
    private $door_type; 
    public function __construct($type='normal') { 
    $this->door_type = $type; 
    } 
} 

//Create a 'normal' door 
$normal_door = new Door(); 
$normal_door = new Door('normal'); //the same as above 

//Create a 'safe' door 
$safe_door = new Door('safe'); 

Этот пример, очевидно, не так, как вы бы реализовать его в реальном мире, но я надеюсь, что вы видите его использовать.

В качестве примечания, не все языки поддерживают это, например, Java.

Смежные вопросы