Настройка нескольких классов для представления объектов реального мира

0

PHP: Если у меня есть класс клиентов, и у клиента может быть машина и счет-фактура, и я хочу иметь отдельные классы автомобилей и счетов, что является наиболее эффективным способом их настройки?


Итак, у меня есть три разных класса:

customer.class.php

customer_car.class.php

customer_invoice.class.php

Какой лучший способ настроить отношения/инициализацию между тремя классами? У клиента может быть автомобиль или счет-фактура. Я хочу, чтобы код был разделен, чтобы его было легко поддерживать.

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

?

  • 1
    Это был длинный заголовок .....
  • 0
    Теперь дождаться его обновления в кеше домашней страницы .... отметьте галочку ...
Показать ещё 3 комментария
Теги:
class
theory

3 ответа

2
Лучший ответ

Вот только идея, поскольку это может быть структура по-разному, чтобы отразить вашу бизнес-логику...

У вас есть 3 отдельных класса customer, car и invoice.

Customers может иметь значение 0 для многих cars для них.

customer может иметь для них значение 0 для многих invoices.

An 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. Сколько потребуется дополнительной работы с вашим подходом и моим. Это звучит как проблема с домашней работой, поэтому я не буду описывать ее.

2

Ни один из трех классов не связан вообще. так что простой ответ в этом вопросе. Создайте две переменные в классе клиентов, которые могут содержать класс автомобиля и класс счета.

Помните, что в OOP используются отношения ISA HASA, другими словами, клиент не является автомобилем или счетом, а у клиента есть автомобиль и счет-фактура, поэтому в обоих случаях он соответствует HASA.

Клиент ISA-клиента, хотя вы можете расширить класс клиентов из класса person.

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

   ...
}

DC

  • 1
    Конечно, как правильно указывает rockola, у клиента может быть несколько экземпляров, чтобы вы могли иметь массивы, содержащие автомобили и счета.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню