2013-05-28 3 views
1

Я сейчас вникаю в основы php class/constructor. Я понимаю, как работает конструктор, но не почему я должен его использовать. Например, когда у меня есть конструктор, как это:php constructor vs callback

function __construct($arg1, $arg2){ 
    $this->name = $arg1; 
    $this->speed = $arg2; 
} 

Почему я должен использовать __constructor и не простой обратный вызов, как:

function foo($arg1,$arg2){ 

    $this->name = $arg1; 
    $this->speed = $arg2; 
} 

Спасибо

+0

Поскольку конструктор инициирует объект класса и вызывается по умолчанию при создании нового объекта класса –

+0

'$ class = new cls ('1', '2')' быстрее, чем '$ class = new cls(); $ Class-> Foo ('1', '2') '. –

+0

Значит, это всего лишь производительность? bc, делая это, я могу добиться того же результата – xhallix

ответ

1
  1. Ведение

    $obj = new Class($var1, $var2); 
    

    И

    $obj = new Class($var1, $var2); 
    $obj->foo($var1, $var2); 
    

    имеют тот же конечный результат

  2. Заставляя значения, передаваемые конструктору, класс может определять обязательные значения, которые он должен иметь для построения класса. Как и в последнем случае, можно игнорировать foo.

  3. Имея метод для инициализации средства, один в конце концов, имеющие разные имена методов, Foo, инициализации и т.д., конструктор позволяет избежать этого

0

Конструктор всегда называется на экземпляре объекта и является известным шаблоном.

Ваш второй пример не является (если он предназначен для выполнения аналогичной инициализационной роли как конструктор).

0
<?php 
class abc { 
    function __construct($arg1, $arg2){ 
     echo $arg1.' '.arg2; 
    } 
} 
$obj = new abc('manish','jangir'); 
?> 

Он будет печатать "Маниш Джангир" автоматически, когда объект создается

0

Основная цель состоит в том, чтобы сохранить свой код в чистоте. При размещении инициализации в конструкторе вы можете KAN быть уверен, что переменным будет использоваться в другой функции, например, будет находиться в допустимом состоянии:

class Foo{ 
    private $number; 

    public function setNumber($number) { 
     $this->number = $number; 
    } 

    public function getNumber() { 
     if ($this->number=== null) { 
      throw new RuntimeException("The Number is Null !"); 
     } 
     return number; 
    } 
} 

это класс с конструктором

class Foo{ 
    private $number; 

    public function __construct($number) { 
     $this->number = $number; 
    } 

    public function getNumber() { 
     if ($this->number=== null) { 
      throw new RuntimeException("The Number is Null !"); 
     } 
     return number; 
    } 
} 

с конструктор, вы можете быть уверены, что номер будет инициализирован. Надеюсь, что мой ответ достаточно ясен, но если у вас есть еще один вопрос о моем ответе, не стесняйтесь спрашивать в комментарии :)

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