Skip to content

Instantly share code, notes, and snippets.

@BerezhniyDmitro
Created July 30, 2019 07:08
Show Gist options
  • Save BerezhniyDmitro/bb3436a1794f2d0f0144b8f245d6bf91 to your computer and use it in GitHub Desktop.
Save BerezhniyDmitro/bb3436a1794f2d0f0144b8f245d6bf91 to your computer and use it in GitHub Desktop.
<?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