2013-07-23 38 views
0

我想知道如果我可以以某種方式分配新的變量,而無需構造。在不使用構造函數的情況下分配新的類變量?

爲了設置初始私有類變量,在每個類上創建構造函數似乎相當大的矯枉過正。

這裏是我的就是我想達到

<?php 

class MyClass { 
    public function DoSomething() { 
     echo '1'; 
    } 
} 

class MySecondClass { 
    private $obj = new MyClass(); // Error 

    /* 
     // This works, but I don't like it, I think it's total overkill 
     function __construct() { 
      $this->obj = new MyClass(); 
     } 
    */ 

    public function PrintOne() { 
     $this->obj->DoSomething(); 
    } 
} 

$class = new MySecondClass(); 
$class->PrintOne(); 

正是如此它是完全清楚,這裏的錯誤信息

語法錯誤,意想不到的「新」(T_NEW)在第10行

例子
+0

你不能初始化一個類變量作爲運行時調用的結果,你只能使用靜態值。你的構造方法很好。 –

+0

構造初始變量是構造函數的全部目的。你爲什麼認爲這是過度殺傷力? –

+0

@ dev-null-dweller來自'C#'我習慣於不這樣做。這就是全部,沒有任何特別的原因。 – sed

回答

2

您不能(我知道),您需要要麼在構造函數(選項A)中實例化它,要麼傳入對象(選項B)。

選項A:

class MySecondClass { 
    private $obj; 

    function __construct() { 
     $this->obj = new MyClass(); 
    } 

    public function PrintOne() { 
     $this->obj->DoSomething(); 
    } 
} 

選項B:

class MySecondClass { 
    private $obj; 

    function __construct(MyClass $obj) { 
     $this->obj = $obj; 
    } 

    public function PrintOne() { 
     $this->obj->DoSomething(); 
    } 
} 
+0

Okey我會堅持建設者然後.. – sed

+2

@Steve:只是一個說明。選項B通常更好。 –

+0

@Steve,您可能想觀看[本講座](https://www.youtube.com/watch?v=wEhu57pih5w)。 –

0

你不能這樣做,在這種方式。你可以讓屬性初始化,但它們需要是一個常量值,而不是函數的結果或者試圖實例化一個類。

http://www.php.net/manual/en/language.oop5.properties.php

IMO,你不應該你的類的構造函數中實例化的新對象。您應該將它們作爲創建對象的參數傳遞。

相關問題