Есть задачка, пытаюсь ее решить, но не пойму почему так отрабатывает код.
Задача. Передавать настройки в класс для валидации при создания объекта. Так же есть настройки валидации по умолчанию.
По умолчанию опции такие
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);