2013-05-28 39 views
1

我目前正在深入研究php類/構造函數的基礎知識。 我理解構造函數是如何工作的,但不知道爲什麼我應該使用它。 例如,當我有這樣一個構造函數:php構造函數與回調

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(); $類 - > 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'); 
?> 

這將打印 「馬尼什jangir」 時自動創建對象

0

主要目的是讓你的代碼乾淨。隨着把你的初始化在構造函數中,你可以侃一定要在其他功能使用將成爲有效的狀態,例如變量:

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; 
    } 
} 

帶班構造函數,你可以確定該數字將被初始化。我希望我的回答足夠清楚,但如果您對我的回答有其他問題,請隨時在評論中提問:)