За последние 24 часа нас посетили 16312 программистов и 1581 робот. Сейчас ищут 1764 программиста ...

Adodb ActiveRecord + MySQL + типизация

Тема в разделе "Прочие вопросы по PHP", создана пользователем Pah, 13 июн 2009.

  1. Pah

    Pah Активный пользователь

    С нами с:
    5 июл 2008
    Сообщения:
    15
    Симпатии:
    0
    Вопрос такой.
    Ипользую Adodb ActiveRecord, в итоге все поля получаются типа string , при сериализации тоже string , хотелось бы чтобы они примерно соответствовали типа в БД, числа - числа, строки - строки, так как результаты работы скрипта уходят программе на ActionScript и везде конвертацию писать не хочется.

    Как сделать?
    Кто-то что-то подскажет?
     
  2. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Незнаком с Adodb. Вариант "в лоб": делать перед передачей
    PHP:
    1. <?
    2. $table->field = (int)$table->field;
    Или написать класс-наследник от класса Adodb_ActiveRecord и переписать метод получения данных. Но, думается, ребята писавшие Adodb ActiveRecord не от лени к типу не приводили.
     
  3. Pah

    Pah Активный пользователь

    С нами с:
    5 июл 2008
    Сообщения:
    15
    Симпатии:
    0
    Грустно это. Смысл как раз в том, что я поля не предобрабатываю, а делаю автоматически

    Adodb ActiveRecord => associative array => JSON string
     
  4. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Ну, PHP не нужны преобразования к типу, он сам из контекста поймёт:
    PHP:
    1. <?
    2. echo '12' * 2; // = 22
    А другие языки либо вызвали бы ошибку компилятора (языки со статическими типами, коим является ActionScript насколько я помню), либо повторили бы строку "12" дважды ("1212") - языки с жёской, но не статичной типизацией.

    Напиши функцию, которая будет проходить по массиву и если значение is_numeric() (не int, float или число в виде строки ('12' или '12.22')), то преобразовывать в int. Если массив небольшой, то функция пройдтся быстро.

    Например (для "плоского" массива):
    PHP:
    1. <?
    2. function toInt($item){
    3.     return is_numeric($item) ? (int)$item : $item);
    4. }
    5.  
    6. $array = array('Test', '22');
    7. $array2 = array_map('toInt', $array);
    8. // вернёт: array('Test', 22)
     
  5. Pah

    Pah Активный пользователь

    С нами с:
    5 июл 2008
    Сообщения:
    15
    Симпатии:
    0
    Интересная задумка, верно, спасибо. а то я на стороне клиента конвертирую вручную в нужный тип =)).