Jeg implementerede meget af Zend_Db
kode i Zend Framework.
Som andre har sagt, grunden til, at Zend_Db
returnerer strenge i stedet for native PHP-heltal eller flydende er, at PHPs databaseudvidelser returnerer strenge. Og grunden til det er, at der måske ikke er nogen indbygget PHP-type til at repræsentere en bestemt databasetype.
For eksempel MySQL's BIGINT
er et 64-bit signeret heltal. Som standard er PHP int
type er begrænset til 32-bit værdier, så hvis du henter data fra databasen og implicit konverterer dem til int
, kan nogle værdier være afkortet. Der er flere andre lignende tilfælde, for float
og datoer osv.
Brug af strengrepræsentationen for alle datatyper er den bedste måde at forblive enkel og konsistent på, være sikker på at undgå tab af data og undgå at skrive en masse leverandørspecifik specialtilfældekode for at udføre datatypekortlægning. Den ekstra kode ville også medføre en præstationsstraf.
Så hvis du har specifikke tilfælde, hvor du har brug for, at databaseresultater skal kortlægges til native PHP-datatyper, bør du implementere det selv i din applikationskode (f.eks. i en tilpasset Zend_Db_Table_Row
klasse).