<?php
class Validator
{
private $rules;
public function __construct($rules)
{
$this->rules = $rules;
}
//Код этой функции тоже черновой, потому что я пока что не думал куда всунуть строку "$errorList = new ErrorList;"
public function carryOutVerification(Enrollee $enrollee): ErrorList
{
$errorList = new ErrorList;
foreach ($this->rules as $key => $value)
{
foreach ($value as $key1 => $value1)
{
$result = $value1($enrollee->get($key));
if (empty($result)==false) {
$errorList->add($key);
}
}
}
return $errorList;
}
}
/*ValidationError = 1 текст ошибки; если поле не прошло одну проверку - создается один объект,
не прошло вторую проверку - создается второй объект с текстом этой ошибки*/
class ValidationError
{
private string $errorText;
public function __construct(string $errorText): void
{
$this->errorText = $errorText;
}
use Getter;
}
/*Каждое поле ErrorList (кроме последнего) - массив, где ключ - 0, 1, 2..., элементы - ссылки на объект ValidationError*/
class ErrorList
{
private array $name;
private array $surname;
private array $groupNumber;
private array $email;
private array $totalPointsUSE;
private array $yearOfBirth;
//Это поле существует здесь, потому что я не знаю куда его добавить, ведь мне нужно сообщать своей функции (errorListIsEmpty)
//По каким именам полей нужно проходиться циклом
private $listOfFields = ["name", "surname", "groupNumber", "email", "totalPointsUSE", "yearOfBirth"];
//Этот код изначально взят из VSCode, в котором у меня есть трейты, их код я сюда решил не добавлять
use Setter, Getter;
public function add(string $field, ValidationError $validationError): void
{
$this->$field[] = $validationError;
}
//Я сделал эту функцию приватной, потому что подумал, что она нужна только для работы errorListIsEmpty()
private function getListOfFieldErrors(string $field): array
{
foreach ($this->$field as $key => $value)
{
$result = $value->get("ErrorText");
if (!empty($result))
{
//Я еще не решил каким образом я буду представлять список ошибок для конкретного поля
//т.е. код этой функции - черновой
$listOfFieldErrors [] = $result;
}
}
return $listOfFieldErrors;
}
public function errorListIsEmpty(): bool
{
foreach ($this->listOfFields as $key => $value)
{
$result = $this->getListOfFieldErrors($value);
if (!empty($result))
{
return false;
}
}
return true;
}
}
//Внешний код:
//$errorList = $validator->carryOutVerification(Enrollee $enrollee);
//Проверка на то, нашел ли валидатор ошибки:
//$errorList->errorListIsEmpty();
Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).