2013-11-28 51 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被撤销**。 –