Created
July 30, 2019 07:08
-
-
Save BerezhniyDmitro/bb3436a1794f2d0f0144b8f245d6bf91 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
namespace App\ValueObjects; | |
use Webmozart\Assert\Assert; | |
/** | |
* Class MobilePhone обьект-значения мобильного телефона | |
*/ | |
class MobilePhone implements FromStringCreatable | |
{ | |
/** | |
* @var int минимальное количество цифр в мобильном номере телефона | |
*/ | |
const MIN_COUNT_NUMBER = 7; | |
/** | |
* @var int максимальное количество цифр в мобильном номере телефона | |
*/ | |
const MAX_COUNT_NUMBER = 12; | |
/** | |
* @var string значение мобильного телефона | |
*/ | |
private $phone; | |
/** | |
* MobilePhone constructor. | |
* | |
* @param string $phone | |
*/ | |
private function __construct(string $phone) | |
{ | |
$this->phone = $phone; | |
} | |
/** | |
* Метод создает обьект значение | |
* | |
* @param string $phone | |
* | |
* @return MobilePhone | |
*/ | |
public static function createFromString(string $phone): MobilePhone | |
{ | |
$phone = filter_var($phone, FILTER_SANITIZE_NUMBER_INT); | |
$phone = str_replace(['-', '+', '(', ')', ' '], '', $phone); | |
Assert::digits( | |
$phone, | |
sprintf('Проверьте правильность номера телефона, разрешены только цифры - %s', $phone) | |
); | |
Assert::minLength( | |
$phone, | |
self::MIN_COUNT_NUMBER, | |
sprintf('Украинский мобильный номер не может иметь менее 7 символов - %s', $phone) | |
); | |
Assert::maxLength( | |
$phone, | |
self::MAX_COUNT_NUMBER, | |
sprintf('Украинский мобильный номер не может иметь более 12 цифр - %s', $phone) | |
); | |
return new self($phone); | |
} | |
/** | |
* Метод преобразовывает значение для записи в БД | |
* | |
* @return string | |
*/ | |
public function __toString() | |
{ | |
return $this->getValue(); | |
} | |
/** | |
* Метод возвращает значение | |
* | |
* @return string | |
*/ | |
public function getValue() | |
{ | |
return $this->phone; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment