Zaimplementowałem wiele Zend_Db
kod w Zend Framework.
Jak powiedzieli inni, powód, dla którego Zend_Db
zwraca łańcuchy zamiast natywnych liczb całkowitych lub zmiennoprzecinkowych PHP jest to, że rozszerzenia bazy danych PHP zwracają łańcuchy. Powodem tego jest to, że może nie istnieć natywny typ PHP reprezentujący określony typ bazy danych.
Na przykład BIGINT
MySQL jest 64-bitową liczbą całkowitą ze znakiem. Domyślnie PHP int
typ jest ograniczony do wartości 32-bitowych, więc jeśli pobierasz dane z bazy danych i niejawnie konwertujesz je na int
, niektóre wartości mogą zostać obcięte. Istnieje kilka innych podobnych przypadków dla float
i daty itp.
Używanie reprezentacji w postaci ciągu dla wszystkich typów danych to najlepszy sposób na zachowanie prostoty i spójności, bezpieczeństwo w zakresie unikania utraty danych i unikanie pisania wielu kodów specjalnych dla dostawcy w celu mapowania typów danych. Ten dodatkowy kod również wiązałby się z obniżeniem wydajności.
Więc jeśli masz konkretne przypadki, w których potrzebujesz mapować wyniki bazy danych do natywnych typów danych PHP, powinieneś zaimplementować to samodzielnie w kodzie aplikacji (np. w niestandardowym Zend_Db_Table_Row
klasa).