【问题标题】:Setting Up Multiple Classes to Represent Real-World Objects设置多个类来表示真实世界的对象
【发布时间】:2010-01-07 03:16:36
【问题描述】:

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


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

customer.class.php

customer_car.class.php

customer_invoice.class.php

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

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

?

【问题讨论】:

  • 现在等待它在主页缓存中更新...滴答滴答...
  • @Chacha102 你杀死了令人敬畏的“标题说明一切”标题! >
  • 这个很棒的标题把我主页上的 CSS 搞砸了……所以 BLEH! :P
  • 我发现的唯一问题是原发帖人后来找不到他的帖子,因为它的标题这么长,现在又这么短......嗯......现在我'我已经不再关心了。

标签: php mysql class theory


【解决方案1】:

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

有 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 语法进行开发。

【讨论】:

    【解决方案2】:

    为什么不

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

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

    【讨论】:

      【解决方案3】:

      这三个类都没有关系。所以简单的答案就在问题中。 在客户类中创建两个变量,它们可以包含汽车类和发票类。

      记住在 OOP 中使用 ISA HASA 关系,换句话说,客户既不是汽车也不是发票,但客户有汽车和发票,因此在这两种情况下它都匹配 HASA。

      客户 ISA 人员,因此您可以从人员类扩展客户类。

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

      直流

      【讨论】:

      • 当然,正如 rockola 正确指出的那样,客户可以拥有多个,因此您可以拥有存放汽车和发票的数组。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-31
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      • 2018-11-03
      相关资源
      最近更新 更多