2013-11-28 52 views
4

我正要寫一種方法將一些賬單數據轉換爲發票。PHP靜態與實例

所以說,我有一個包含創建invocie項目所需數據的對象數組。

雖然在計費控制器下列哪種方式是正確的

$invoice = new Invoice(); 
$invoice->createInvoiceFromBilling($billingItems); 

然後在發票類

Public Function createInvoiceFromBilling($billingItems) 
{ 
    $this->data = $billingItems; 

OR

Invoice::createInvoiceFromBilling($billingItems) 

然後在發票類

Public Function createInvoiceFromBilling($billingItems) 
{ 
    $invoice = new Invoice(); 
    $invoice->data = $billingItems; 

哪種方式是正確的方法?

問候

+1

你真正需要的是一個什麼樣的工廠創建發票:'$發票= $ invoceFactory-> createFromBilling($ billingItems);' –

+0

默認第一,並通過$ billingItem通過構造應該會更好,到目前的依存關係帳單和發票。但是,如果您有很多方法來創建發票(不僅來自結算),它應該考慮第二個,就像Factory在設計模式中一樣。 – Fwolf

+0

我對工廠一無所知,只是看了一下,似乎是一個好主意,所以從某種意義上說,您可以使用工廠來運行它,類似於第一個示例 – Liam

回答

-1

首先寫入的方法更好,因爲在第二個你的代碼將在每次被調用時生成發票對象。

+0

-1:請至少了解OOP的基礎知識。問題不是關於「何時創建對象」,而是關於「如何從帳單數據中創建發票」。 –

+0

任何不喜歡的原因? –

+1

請打開你的眼睛,他不是一個單身人士,他正在創建發票對象();每次這個函數被調用,提高你的閱讀能力 –

2

正如tereško在上面的評論部分指出的,你應該看看使用Factory pattern。從鏈接的來源一個很好的(和簡單的)現實世界爲基礎的例子:

<?php 
class Automobile 
{ 
    private $vehicle_make; 
    private $vehicle_model; 

    public function __construct($make, $model) 
    { 
     $this->vehicle_make = $make; 
     $this->vehicle_model = $model; 
    } 

    public function get_make_and_model() 
    { 
     return $this->vehicle_make . ' ' . $this->vehicle_model; 
    } 
} 

class AutomobileFactory 
{ 
    public function create($make, $model) 
    { 
     return new Automobile($make, $model); 
    } 
} 

// have the factory create the Automobile object 
$automobileFactory = new AutomobileFactory(); 
$veyron = $automobileFactory->create('Bugatti', 'Veyron'); 

print_r($veyron->get_make_and_model()); // outputs "Bugatti Veyron" 

正如你所看到的,它是AutomobileFactory實際創建汽車的實例。

+0

-1:無意義地使用靜態。這基本上會在您需要創建新實例時導致與類名緊密耦合。 –

+0

@tereško複製並粘貼它沒有意識到。公平地說,該網站通常很好。 –

+0

其實它不是。它更像是一個FIG成員的廣告網站=/..然後再一次,它不像我們被寵壞的選擇。無論如何:** downvote被撤銷**。 –