设置多个类来表示真实世界的对象

时间:2010-01-07 03:16:36

标签: php mysql class theory

PHP:如果我有一个客户类,并且客户可以拥有汽车和发票,并且我希望有单独的汽车和发票类,那么设置它们的最有效方法是什么?


所以,我有三个不同的类:

customer.class.php

customer_car.class.php

customer_invoice.class.php

在三个类之间建立关系/初始化的最佳方法是什么?客户可以拥有汽车或发票。我想保持代码分开,以便易于维护。

$customer = new customer();
$car = $customer->newCar();
$invoice = $customer->newInvoice();

3 个答案:

答案 0 :(得分:2)

这只是一个想法,因为它可能是不同的结构,以反映您的业务逻辑......

有3个单独的课程customercarinvoice

Customers可以为他们提供零到多cars个。

Customer可以为他们提供零到多invoices个。

invoice可能属于1而且只有1 customer且能够拥有1到多个cars

客户类别的插图:

class Customer 
{
    var $cars = array();
    var $invoices = array();

    function Customer() { }

    function OwnCar($car)
    {
        $cars[] = $car;
    }

    function OwnInvoice($invoice)
    {
        $invoices[] = $invoice;
    }
}

使用说明:

$customerA = new Customer();
$carA = new Car();
$invoiceA = new Invoice($customerA, array($carA));

$customerA->OwnCar($carA);
$customerA->OwnInvoice($invoiceA);

注意: 插图代码在PHP4中,您可以随意(也推荐)使用PHP5语法进行开发。

答案 1 :(得分:2)

三个类中没有一个完全相关。所以简单的答案就是问题所在。 在客户类中创建两个可以包含汽车类和发票类的变量。

记住在OOP中使用ISA HASA关系,换言之,客户不是汽车或发票,但客户有汽车和发票,因此在两种情况下都与HASA匹配。

客户ISA人员,但您可以从个人班级扩展客户类别。

class customer extends person {
    private $invoice; // variable to hold invoice
    private $car;     // variable to hold car

   ...
}

DC

答案 2 :(得分:2)

为什么不

$customer = new customer();
$car = new car();
$invoice = new invoice();

$car->SetOwner($customer);
$invoice->SetCustomer($customer);

考虑添加新项目,例如Payment。您的方法与我的方法需要多少额外工作。这听起来像是一个家庭作业问题,所以我不会拼出来。