@zeuss56

Как привести переменную к переменному типу?

<?php $value = '123'; $type = 'int'; ?>
Хотелось бы, чтобы работало так:
<?php $value = ({$type})$value; ?>
Но увы замена кода переменной невозможна, хотя:
<?php $value = eval("return ($type)$value;"); ?>
Применение eval() нежелательно, поэтому прибегнем к функции:
<?php
function SetType($value, $type) {
    switch ($type) {
        case 'int':
        case 'integer':
            return (int)$value;
        case 'string':
            return (string)$value;
        case 'bool':
        case 'boolean':
            return (bool)$value;
        case 'float':
        case 'double':
        case 'real':
            return (float)$value;
    }
}
$value = SetType($value, $type);
Недавно был подобный вопрос с переменными операторами.
Интересно узнать, как это реализуется в других языках.
У вас есть другие идеи решения этой задачи?
Хотелось бы найти что-то специально для этого предназначенное, вроде перегрузки.
  • Вопрос задан
  • 249 просмотров
Решения вопроса 2
pi314
@pi314
Президент Солнечной системы и окрестностей
В других языках ЭТО реализуется так, как этого требует система типов конкретного языка, с помошью плюшек, предоставляемых самим языком и/или его стандартной библиотекой :) Подробности (например): раз, два, три. На практике это может быть что угодно - от велосипедной эксплуатации автобоксинга или перегрузки операторов / сигнатур методов, через рефлексию, дженерики, темплейты (в плюсах), или оберточные типы (как в Java) и вплоть до реальной компиляции "на лету" в каком-нить Groovy. Последнее, семантически - тот же eval, чреватый теми же побочными эффектами.

Тут фантазия разработчика, владеющего конкретным языком, ограничена, разве что, здравым смыслом, который, в первую очередь, призывает задуматься, а нафига это вообще нужно :) И, что характерно: в подавляющем большинстве случаев (если, конечно, мы не пишем како-нибудь интерпретатор или полиморфный вирус) эти размышления приводят к тому, что все решается проще и надежнее именно статической типизацией... т.е. да - где-то таки придется написать switch case :)
Ответ написан
Комментировать
zorca
@zorca
Неудачная попытка сделать Питона из Слоника? )))
stackoverflow.com/questions/4687967/php-casting-to...
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы