За последние 24 часа нас посетили 22817 программистов и 1236 роботов. Сейчас ищут 723 программиста ...

Помогите с решением задачи из книги Дэвида Скляра "Изучаем Php 7"

Тема в разделе "PHP для новичков", создана пользователем AndrewMaxwell, 21 окт 2020.

  1. AndrewMaxwell

    AndrewMaxwell Новичок

    С нами с:
    21 окт 2020
    Сообщения:
    10
    Симпатии:
    0
    Здравствуйте!

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

    Сама задача:

    1. Создайте класс Ingredient. Каждый экземпляр этого класса должен представлять отдельный
    ингредиент блюда, а также отслеживать наименование ингредиента и его стоимость.

    2. Введите в свой новый класс Ingredient метод, изменяющий стоимость ингредиента блюда.

    3. Создайте подкласс, производный от представленного в этой главе класса Entree. Этот под-
    класс должен принимать объекты типа Ingredient вместо символьной строки с наимено-
    ваниями ингредиентов для их обозначения. Введите в этот подкласс метод, возвращающий
    общую стоимость блюда.

    Первые два пункта я сделал, а вот третий вообще не понимаю. Подкласс, который просят создать, должен принимать объекты моего класса Ingredient? А как он это должен делать? В общем, в замешательстве я. А хочется разобраться, все-таки.

    Вот тот самый класс Entree, о котором идет речь:

    PHP:
    1. class Entree {
    2. public $name;
    3. public $ingredients = array();
    4. public function __construct($name, $ingredients) {
    5. if (! is_array($ingredients)) {
    6. throw new Exception(' $ingredients must be an array' );
    7. }
    8. $this->name = $name;
    9. $this->ingredients = $ingredients;
    10. }
    11. public function hasIngredient($ingredient) {
    12. return in_array($ingredient, $this->ingredients);
    13. }
    14. }
     
  2. Grigoriy Kozheletov

    Grigoriy Kozheletov Новичок

    С нами с:
    2 сен 2020
    Сообщения:
    13
    Симпатии:
    5
    Адрес:
    г. Раменское, Московская область
    Возможно как-то так:
    PHP:
    1. class Ingridient
    2. {
    3.     public $name;
    4.     public $cost;
    5.  
    6.     public function __construct($name, $cost)
    7.     {
    8.         $this->name = $name;
    9.         $this->cost = $cost;
    10.     }
    11.  
    12.     public function changeCost($newCost)
    13.     {
    14.         $this->cost = $newCost;
    15.     }
    16. }
    17.  
    18. class Entree
    19. {
    20.     public $ingridients = [];
    21.  
    22.     public function __construct(array $ingridients)
    23.     {
    24.         $this->ingridients = $ingridients;
    25.     }
    26.  
    27.     public function getFullCost()
    28.     {
    29.         $sum = 0;
    30.         foreach ($this->ingridients as $ingridient) {
    31.             $sum += $ingridient->cost;
    32.         }
    33.  
    34.         return $sum;
    35.     }
    36. }
    37.  
    38. $ingridient1 = new Ingridient('potatoes', 5);
    39. $ingridient2 = new Ingridient('carrots', 10);
    40. $ingridient3 = new Ingridient('onions', 15);
    41.  
    42. $soup = new Entree([
    43.     $ingridient1,
    44.     $ingridient2,
    45.     $ingridient3
    46. ]);
    47.  
    48. echo $soup->getFullCost(); // 30
     
    AndrewMaxwell нравится это.
  3. AndrewMaxwell

    AndrewMaxwell Новичок

    С нами с:
    21 окт 2020
    Сообщения:
    10
    Симпатии:
    0
    Cпасибо, теперь понятно
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    Только там про подкласс речь шла, а вы смарганили новый класс

    Ну так, а что такое объекты класса?
     
  5. AndrewMaxwell

    AndrewMaxwell Новичок

    С нами с:
    21 окт 2020
    Сообщения:
    10
    Симпатии:
    0
    Ну вот я еще больше запутался теперь. Глянул на решение с утра, не задумываясь, и даже и не заметил, что подкласса-то там нет.

    Ну это сущности, которые создаются на его основе? Но вот я не пойму, что значит "Этот под-
    класс должен принимать объекты типа Ingredient
    "?

    Это речь про мой класс, который я должен был создать в первом пункте или нет? И какими свойствами этот подкласс обладать-то должен тогда? А если там должен быть метод по определению общей стоимости блюда, значит, в свойствах должна быть цена ингредиента как минимум и значит, что речь не про мой собственный класс Ingredient, в котором тоже есть цена.
    В общем, решительно не понимаю, что именно надо сделать.
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    Ну если сущности создаются, их можно засунуть в массив? Засунуть в параметр? Получить открытые свойства экземпляра, вызывать открытые методы, если они есть? Перечитайте тогда главу соответствующую, только не читайте одни примеры, как тут многие делают. Заодно можете прочитать https://www.php.net/manual/ru/language.oop5.php