Size: a a a

2021 May 03

AP

Andrey Polyakov in PHP
Я вот и хочу сделать что-то типа #[Assert(object, property,  assert_method)]
источник

KN

Kirill Nesmeyanov in PHP
Ассерты - это не валидация
источник

KN

Kirill Nesmeyanov in PHP
Ну и такое уже есть, называется DbC
источник

KN

Kirill Nesmeyanov in PHP
Из старых решений - это https://github.com/php-deal/framework
источник

KN

Kirill Nesmeyanov in PHP
Ну или вот моё решение, только я его не допилил: https://github.com/SerafimArts/Contracts
источник

AP

Andrey Polyakov in PHP
Почему?

Пример:
  final class Assert {

   public static function isString(mixed $value)
   {
     if (!!is_string($value))
       throw ...
   }
 }

Это не ассерт?
источник

KN

Kirill Nesmeyanov in PHP
Ассерты - это ассерты, а валидация - валидация
источник

KN

Kirill Nesmeyanov in PHP
Это как назвать "метод" "функцией". Ну т.е. да, но нет
источник

AP

Andrey Polyakov in PHP
Пардон. Подправил код
источник

AP

Andrey Polyakov in PHP
Выкидывается исключение..
источник

KN

Kirill Nesmeyanov in PHP
Ты кажется не понял
источник

KN

Kirill Nesmeyanov in PHP
Изначально речь была про валидацию
источник

KN

Kirill Nesmeyanov in PHP
Потом про ассерты
источник

KN

Kirill Nesmeyanov in PHP
Это как бы и одно и тоже, но разные вещи и для разных задач
источник

KN

Kirill Nesmeyanov in PHP
Одно проверяет интерфейсы, а другое бизнес-логику. Одно располагается на всех уровнях приложения, а другое проверяет входящие пользовательские данные
источник

KN

Kirill Nesmeyanov in PHP
Ассерты можно (и нужно) отключать на продакшн коде, а валидацию отключать нельзя
источник

AP

Andrey Polyakov in PHP
Я понимаю так. Что ассерты нужны для того чтобы не создать объект с невалидными данными.
источник

KN

Kirill Nesmeyanov in PHP
ну например
источник

KN

Kirill Nesmeyanov in PHP
public function __construct(string $uuid) 
{
   assert(Assert::isUuid($uuid));
}
источник

KN

Kirill Nesmeyanov in PHP
Ассерты - это как дополнения к типизации
источник