PHP静态与实例

时间:2013-11-28 10:18:23

标签: php oop object static

我正准备编写一种方法将某些结算数据转换为发票。

所以说我有一个对象数组,其中包含创建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;

哪种方式正确?

此致

2 个答案:

答案 0 :(得分: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实际上创建了汽车的实例。

答案 1 :(得分:-1)

首先编写的方法更好,因为在第二个代码中,每次调用代码时都会生成发票对象。