динамическое (скалярное) приведение в php - PullRequest
0 голосов
/ 01 июня 2018

Мне нужно привести значение в типе определить в строке.На данный момент я использую это:

/**
 * @param mixed $val
 * @param string $type
 *
 * @return bool|float|int|string
 */
protected function castTo($val, $type)
{
    switch ($type) {
        case 'boolean':
        case 'bool':
            return (boolean) $val;
        case 'integer':
        case 'int':
            return (int) $val;
        case 'string':
            return (string) $val;
        case 'double':
        case 'float':
            return (float) $val;
        default:
            return $val;
    }
}

Но знаете ли вы лучшее решение (в php 5.6 и 7+)?

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

как @deceze solution ... но прямо в phplib http://php.net/manual/en/function.settype.php

0 голосов
/ 01 июня 2018

Используйте функциональные эквиваленты, такие как intval, чтобы получить «динамический дескриптор»:

$funcs = ['boolean' => 'boolval', 'integer' => 'intval', 'string' => 'strval', 'float' => 'floatval', ...];

if (!array_key_exists($type, $funcs)) {
    return $val;
} else {
    return call_user_func($funcs[$type], $val);
}

Обратите внимание, что это может быть короче, но не обязательно в целом лучше чем switch

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...