Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP静态与实例_Php_Oop_Object_Static - Fatal编程技术网

PHP静态与实例

PHP静态与实例,php,oop,object,static,Php,Oop,Object,Static,我正要写一个方法,将一些账单数据转换成发票 假设我有一个数组和一个对象数组,其中包含创建发票项所需的数据 在计费控制器中,以下哪种方式是正确的 $invoice = new Invoice(); $invoice->createInvoiceFromBilling($billingItems); 然后在Invoice类中 Public Function createInvoiceFromBilling($billingItems) { $this->data = $bill

我正要写一个方法,将一些账单数据转换成发票

假设我有一个数组和一个对象数组,其中包含创建发票项所需的数据

在计费控制器中,以下哪种方式是正确的

$invoice = new Invoice();
$invoice->createInvoiceFromBilling($billingItems);
然后在Invoice类中

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

然后在Invoice类中

Public Function createInvoiceFromBilling($billingItems)
{
    $this->data = $billingItems;
Public Function createInvoiceFromBilling($billingItems)
{
    $invoice = new Invoice();
    $invoice->data = $billingItems;
哪条路是正确的


关于

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

正如tereško在上面的评论部分所指出的,您应该考虑使用。一个很好的(简单的)基于真实世界的链接源示例:

<?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"

您实际需要的是创建发票的工厂:
$invoice=$invoiceFactory->createFromBilling($billingItems)
默认值为1,通过构造函数传递$billingItem应该更好,以显示账单和发票的依赖关系。但是,如果你有很多方法来创建发票(不仅仅是计费),它应该考虑第二,比如工厂的设计模式。我对工厂一无所知,只需阅读它,这似乎是个好主意,所以在某种意义上,你会使用工厂来运行它类似于第一个。example@Fwolf,我的invoice类有许多创建发票的方法,而且它也是我的Yii框架的模型类,因此构造函数将是一个问题。因此,如果我使用该类从各种不同的来源创建发票,那么使用factory方法,仍然返回InvoiceWho的一个实例,他妈的谁会投票以“基于意见”的方式结束这篇文章?!?如果你能找到一个复制品,我会理解的(因为肯定有一个),但是如果你坚持的话,没有任何观点可以支持。-1:请至少学习OOP的基础知识。问题不是关于“何时创建对象”,而是关于“如何从账单数据中装箱发票”。有什么不喜欢的原因吗?请睁开眼睛,他不是一个人在创建发票对象();每次调用此函数时,提高您的阅读技能我猜您(以及对您不知情的评论投赞成票的人)不知道“工厂方法”(您是其支持者)是一种反模式,并对体系结构造成严重影响。静态工厂方法既是一个复杂的黑洞,因为它吸引了越来越多的外部逻辑,也造成了类名称的紧密耦合。似乎你没有强OPP,你只是看到一个类并开始投票支持它,即使是工厂模式也无法解决它,重点是他的解决方案不是包含工厂或单体工厂,正如我指出的。兄弟,不要低估任何人。-1:毫无意义地使用静力学。这本质上会导致在需要创建新实例时与类名紧密耦合。@tereško复制并粘贴了它,但没有意识到。平心而论,这个网站通常都很好,但事实并非如此。它更像是国际体联成员的广告网站。。再说一次,我们并不是被宠坏了。无论如何:否决票被撤销。@tereško我最大的抱怨是,它可以做更好的组织/分类,但更多时候,它确实推荐了一些好的做法。我想你关于不被宠坏的观点就站在这里:)