Это должно быть !!
(оно преобразует значение в логическое значение), но оно вообще не нужно. Я предполагаю, что оригинальный кодировщик принял ~
за !
, тогда они добавили (bool)
перед ним, чтобы достичь желаемого результата (потому что, как вы заметили в вопросе, ~~
- это запрет)
Тернарный оператор (?:
) заставляет вычислять его первый аргумент как логический.
Логическое значение для $field->req
такое же, как для !! $field->req
и (bool) ~~$field->req
(и (bool)$field->req
btw).
Я бы полностью удалил часть (bool) ~~
, чтобы получить код поменьше и чище.
Редактировать, задавая вопросы : Единственный эффект ~~ в PHP - вырезать десятичные числа из значения с плавающей запятой .
Показать следующие результаты:
$a = 2.123;
$b = -2.123;
$c = new stdClass();
$d = ["a",2,"c"];
$e = "lord";
$f = -3;
$g = false;
$h = null;
$j = -2.99;
$k = 2.99;
var_dump(~~$a);
var_dump(~~$b);
// var_dump(~~$c); // error
// var_dump(~~$d); // error
var_dump(~~$e);
var_dump(~~$f);
// var_dump(~~$g); // error
// var_dump(~~$h); // error
var_dump(~~$j);
var_dump(~~$k);
var_dump(!!$a);
var_dump(!!$b);
var_dump(!!$c);
var_dump(!!$d);
var_dump(!!$e);
var_dump(!!$f);
var_dump(!!$g);
var_dump(!!$h);
var_dump(!!$j);
var_dump(!!$k);
int (2) int (-2) string (4) "Лорд" int (-3) int (-2) int (2)
bool (правда) bool (правда) bool (правда) bool (правда) bool (правда) bool (правда)
bool (false) bool (false) bool (true) bool (true)