Рефакторинг для подключения нескольких провайдеров геоданных. Усовершенствование алгоритма выбора.
Скрытый контент
Чтобы не пропускать новые эпизоды подпишитесь на наш канал @deworkerpro в Telegram
Комментарии (6)
rodigy
Доброго времени суток.
Такой вопрос не по теме, популярно и обосновано ли использование монад в php, пока не очень понимаю преимущества, повсеместно используются только исключения.
Дмитрий Елисеев
Это больше используется в функциональных языках. Их использование в PHP пока не популярно.
Дмитрий
тест из видео не работает
│ ArgumentCountError: Too few arguments to function GEO\Location::__construct(), 1 passed in \tests\ChainLocatorTest.php on line 20 and exactly 3 expected
│
│ \src\Location.php:13
│ \tests\ChainLocatorTest.php:20
Дмитрий Елисеев
Поменяйте на new Location('Exptected', null, null)
uhamurad
Дмитрий, как вам такая идея: дополнить класс Location методом getPrecision(), который будет возвращать точность данных объекта локации - 3, если известен город; 2, если известны только регион и страна; 1, если известна только страна? Тогда реализацию метода ChainLocator::locate() можно упростить.
Дмитрий Елисеев
Да, можно инкапсулировать точность в Location:
class Location
{
...
public function getPrecision(): int
{
if (empty($this->city)) {
return 3;
}
if (empty($this->region)) {
return 2;
}
if (empty($this->country)) {
return 1;
}
return 0;
}
}
Это будет удобно в ChainLocator, но не будет использоваться в других.
Доброго времени суток. Такой вопрос не по теме, популярно и обосновано ли использование монад в php, пока не очень понимаю преимущества, повсеместно используются только исключения.
Это больше используется в функциональных языках. Их использование в PHP пока не популярно.
тест из видео не работает
│ ArgumentCountError: Too few arguments to function GEO\Location::__construct(), 1 passed in \tests\ChainLocatorTest.php on line 20 and exactly 3 expected │ │ \src\Location.php:13 │ \tests\ChainLocatorTest.php:20
Поменяйте на
new Location('Exptected', null, null)
Дмитрий, как вам такая идея: дополнить класс
Location
методомgetPrecision()
, который будет возвращать точность данных объекта локации - 3, если известен город; 2, если известны только регион и страна; 1, если известна только страна? Тогда реализацию методаChainLocator::locate()
можно упростить.Да, можно инкапсулировать точность в Location:
Это будет удобно в ChainLocator, но не будет использоваться в других.
Или войти через: