@Drumsid

Не пойму как работает этот код php?

Есть задачка, пытаюсь ее решить, но не пойму почему так отрабатывает код.
Задача. Передавать настройки в класс для валидации при создания объекта. Так же есть настройки валидации по умолчанию.
По умолчанию опции такие
private $options = [
            'minLength' => 8,
            'containNumbers' => false        
    ];

Конструктор
public function __construct($options = [])
    {
        $this->options = array_merge($this->options, $options);
    }

сначала вызываем объект с настройками по умолчанию значит опции остаются так же по умолчанию.
$validate1 = new PasswordValidator();
    private $options = [
            'minLength' => 8,
            'containNumbers' => false        
    ];

Потом перезаписываем опции для валидации первый раз так:
$validate1 = new PasswordValidator(['containNumbers' => true]);
    private $options = [
            'minLength' => 8,
            'containNumbers' => true
    ];

Перезапишем второй раз опции, уже с неправильными настройками которых не существует:
$validate1 = new PasswordValidator(['containNumberz' => null]);

И вот тут мне не понятно почему получается, что 'containNumbers' перезаписывается в false, не должен же? Получаю вот такие настройки
private $options = [
            'minLength' => 8,
            'containNumbers' => false,
            'containNumberz' => null
    ];

а ожидаю, что 'containNumbers' останется true
вот для теста набросал пример, тут он отрабатывает как надо...а в задаче не хочет
$options = [
            'minLength' => 8,
            'containNumbers' => false        
    ];
$options2 = [
            'minLength' => 8,
            'containNumbers' => true        
    ];
$options3 = ['containNumberz' => null];
$options = array_merge($options, $options2);
print_r($options);
$options = array_merge($options, $options3);
print_r($options);
  • Вопрос задан
  • 117 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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