Вопрос пользователя Динара в уроке «Изменяемая конфигурация», курс «PHP: Объектно-ориентированный дизайн»

Динара

я не могу решить, вот код ревью https://ru.hexlet.io/code_reviews/328345 почему в решении options -private? что в моем решении не так? Почему при вызове функции класса опции для класса каждый раз переопределяются? как их хранить без изменения при каждом вызове функции?

1 0

Роман Ашиков

Приветствую, Динара!

почему в решении options -private?

Чтобы разобраться, нужно ответить на вопрос для чего вообще используется это ключевое слово. Об этом рассказывалось в уроке — Сокрытие данных (Data Hiding)

Почему при вызове функции класса опции для класса каждый раз переопределяются? как их хранить без изменения при каждом вызове функции?

В этом и заключается суть задачи. При каждом вызове метода truncate() мы можем переопределить опции по умолчанию. Но при следующем вызове этого метода, если вновь не переопредить их (читай не передать в метод), то будут использоваться опции, переданные изначально в конструктор. Этот момент можно проследить во второй части тестов:

 $truncater = new Truncater(['length' => 3]);

Тут мы передаём в конструктор опцию и она сохраняется для всех последующих вызовов truncate() на этом объекте. Но её можно переопределить для конкретного вызова. Ниже в тестах мы видим:

$actual = $truncater->truncate('one two', ['length' => 7]);

А первая часть тестов работает с конфигурацией по умолчанию, то есть при создании объекта в конструктор ничего не передаётся.

Так как вам теперь доступно решение учителя вы можете проследить логику и понять почему ваше решение не работает. Внимательно пройдитесь по коду тестов, посмотрите какие вызовы метода truncate() происходят и в какой последовательности. Нужно разобраться в какой момент и какие массивы опций должны мержиться для того, чтобы код работал в соответствии с условиями задачи.

Кстати, для красивого вывода массивов при отладке можно использовать функцию dump().

Если у вас всёже не получится разобраться, смело задавайте уточняющие вопросы.

0

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг».

Похожие вопросы

Дмитрий И 11 октября 2020 →

В примере https://prnt.sc/uwzogi В тесте https://prnt.sc/uwzoqg отличаются ошибка или опечатка! Не могу п...

Станислав Пефтев 07 августа 2020 →

Добрый день. После решения упражнения, посмотрел решение учителя и снова увидел, что там строковые переменн...

Александр 19 июля 2020 →

Здравствуйте! Может скорректировать условия задачи: "Если строка МЕНЬШЕ ИЛИ РАВНА чем эта опция..." (изнача...

Denis Skvortsov 07 июня 2020 →

Добрый день! А почему константы имеют уровень доступа public, а не private? Если оно и так и так работает -...

Александр Чиркин 02 июня 2020 →

Добрый день, написал функцию truncate, но она не проходит тест, с такой ошибкой: ``` Failed asserting that ...