Бинарные ассоциации между классами PHP - PullRequest
0 голосов
/ 21 октября 2018

Привет всем. У меня есть два класса: Пользователь и Корзина, которые моделируют бинарную связь между ними.Чтобы реализовать его, я создал два класса

A Класс пользователя:

class User{
    protected $name ;
    protected $email;
    protected $shoppingCart;

    public function __construct($name , $email)
    {
        $this->name =$name;
        $this ->email =$email;
        $this->shoppingCart=new ShoppingCart($this);
    }

    //other getter and setter functions
}

class ShoppingCart{
    //Array stores the list of products in the cart:
    protected  $products = array();

    // For storing the IDs, as a convenience:
    protected $ids = array();

    // protected user    
    protected $user;

    // Constructor just sets the object up for usage:    
    function __construct($user) {
        $this->products = array();
        $this->ids = array();
        $this->user =$user;
    }

    // functions to add or delete item    
}

Мой вопрос: нормально ли, чтобы класс пользователя и класс корзины покупок имели экземпляр каждогодругой, поэтому, когда я создаю пользователя, я создаю его корзину покупок в своем конструкторе.и когда я создаю корзину покупок, я передаю информацию пользователя в конструкторе корзин покупок, чтобы назначить корзину покупателя пользователю.

Как правильно смоделировать эту связь.Кроме того, мне нужно было бы получить доступ к корзине покупок пользователей, чтобы отобразить ее общую стоимость из основного сценария PHP ... в этом случае я также могу сделать атрибут ShoppingCart класса пользователей общедоступным

1 Ответ

0 голосов
/ 21 октября 2018

Круговые зависимости могут вызывать ряд разочарований.Сериализация усложняется, глубокое клонирование - это странно, и PHP нужно сделать больше для его сбора.

При этом, если вы знаете об этих побочных эффектах, циклические зависимости могут работать очень хорошо.Другими примерами, которые существуют в дикой природе, является, например, DOM javascript, где каждый элемент имеет ссылку на своих дочерних элементов, а каждый дочерний элемент - на своих родительских.

Я не согласен с комментарием комментатора:

У ShoppingCart нет причины иметь экземпляр пользователя, поскольку вы уже знаете, к какому пользователю он принадлежит (поскольку он находится в объекте пользователя).Вы даже не сможете получить доступ к корзине покупок, не имея доступа к объекту пользователя.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...