Как стать автором
Поиск
Написать публикацию
Обновить
54
0
Андрей Яманов @Tenphi

CSS Cheater, DX Advocate

Отправить сообщение
бог мой… никаких лицензий… копируйте и пользуйте на здоровье… там две страницы кода :)

Лицензия скорее всего будет введена с версией 1 и то исключительно на набор функций, но никак не на сам класс.
придумал еще более компактный способ без объявления функций:

$value = (object) array(
'a' => 2,
'b' => 3,
'c' => 4
);
 
$valid = array((object) array(
'a' => 'integer',
'b' => 'integer',
'c' => 'integer'
), function($value, $options = null) {
if ($value->a+$value->b <= $value->c || $value->a+$value->c <= $value->b || $value->b+$value->c <= $value->a) return true;
});
 
var_dump(Strain::it($value, $valid));

правда, класс такой метод не съел, пришлось его дописать. со следующего коммита на GitHub'е эта запись станет корректной и будет работать.
осталось только по тестам прогнать.
1) в разы сложнее.
2) нету такой гибкости -> область применения много меньше.
3) завязано на классах… точнее увязано в классы.
4) сложнее интегрируется. (если не родной фреймворк)
5) неоправданно много внутренней логики.

Не вижу смысла тянуть за собой таких гигантов, когда нужно лишь проверить данные или преобразовать их в нужную структуру.

И да… вы кажется тоже не прочитали статью. Я предлагаю метод близкий к нативному, но при этом очень функциональный.
куда-то скушались знаки «меньше или равно» в функции 'triangle', будьте внимательны.
Я понял вашу идею, но вы привели слишком плохой «пример». Действительно, такую операцию можно запихнуть в функцию. Поэтому я усложню задачу. Допустим, помимо вашего условия, нам нужно проверить исходные данные (или привести их к integer). Такой алгоритм будет выглядить так:

$value = (object) array(
'a' => 2,
'b' => 3,
'c' => 5
);

Strain::add('must_be', function($value, $options) {
if (Strain::it($value, $options)) return true;
});

Strain::add('triangle', function($value, $options = null) {
if ($value->a+$value->b c || $value->a+$value->c b || $value->b+$value->c a) return true;
});

$valid = array('must_be' => (object) array(
'a' => 'integer',
'b' => 'integer',
'c' => 'integer'
), 'triangle');

var_dump(Strain::it($value, $valid)); // (TRUE — если ошибка, FALSE — если всё ок)

*протестировано
От комментариев воздержусь. Дочитайте до конца статью и не забудьте почитать первый апдейт к ней в самом низу.
Да, довольно непонятно написал. Я уже, если вы заметили, поправил название на 'must_be_integer' чтобы никого не вводить в заблуждение. TRUE — говорит нам о наличии ошибки.

Тут можно поспорить о том, как лучше. Ваш вариант более интуитивный, мой — более логичный, потому что при фильтрации объектов удобнее анализировать Strain::$result конструкцией if, например if($result->name), ведь там может быть и TRUE и строка содержащая информацию об ошибке. В вашем случае нужно будет писать if($result->name !== true).

Это единственная причина такой путаницы.
Если вас это уж совсем смущает, то отредактируйте метод it(), чтобы возвращал наоборот. Там всё предельно просто.
Согласен, внедрение почти всегда процесс довольно сложный, но если использовать этот класс самого начала, то можно получить определенный профит.

К тому же, это не просто валидатор. Возможность привести непонятные данные к строгой структуре может быть востребована где угодно в разработке.
12 ...
10

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность