El análisis y la normalización de la entrada, combinados con la salida en notaciones localizadas, hacen que los datos
sean accesibles a los usuarios en diferentes locales. Existen muchos métodos adicionales en
los componentes Zend_Measure_* para manipular y trabajar con estos datos,
una vez que han sido normalizados.
Probablemente la característica más importante es la conversión a diferentes unidades de
medida. La conversión de una unidad se puede realizar cualquier número de veces usando el método
convertTo(). Las unidades de medida solo se pueden convertir a
otras unidades del mismo tipo (clase). Por lo tanto, no es posible convertir (por ejemplo) una
longitud en un peso, lo cual podría fomentar malas prácticas de programación y permitir
que los errores se propaguen sin excepciones.
El método convertTo() acepta un parámetro opcional. Con
este parámetro puede definir una precisión para la salida devuelta. La precisión
estándar es '2'.
Ejemplo 47.9. Convertir
$locale = new Zend_Locale('de');
$mystring = "1.234.567,89";
$unit = new Zend_Measure_Weight($mystring,'POND', $locale);
print "Kilo:".$unit->convertTo('KILOGRAM');
// constants are considered "better practice" than strings
print "Ton:".$unit->convertTo(Zend_Measure_Weight::TON);
// define a precision for the output
print "Ton:".$unit->convertTo(Zend_Measure_Weight::TON, 3);
Las mediciones se pueden sumar usando add() y restar
usando sub(). El resultado usará el mismo tipo que el
objeto de origen. Los objetos dinámicos admiten un estilo de programación fluido, donde secuencias
complejas de operaciones se pueden anidar sin riesgo de efectos secundarios que alteren los objetos
de entrada.
Ejemplo 47.10. Sumar unidades
// Define objects $unit = new Zend_Measure_Length(200, Zend_Measure_Length::CENTIMETER); $unit2 = new Zend_Measure_Length(1, Zend_Measure_Length::METER); // Add $unit2 to $unit $sum = $unit->add($unit2); echo $sum; // outputs "300 cm"
![]() |
Conversión automática |
|---|---|
Sumar un objeto a otro lo convertirá automáticamente a la unidad correcta. No
es necesario llamar a |
Ejemplo 47.11. Restar
La resta de mediciones funciona igual que la suma.
// Define objects $unit = new Zend_Measure_Length(200, Zend_Measure_Length::CENTIMETER); $unit2 = new Zend_Measure_Length(1, Zend_Measure_Length::METER); // Subtract $unit2 from $unit $sum = $unit->sub($unit2); echo $sum;
Las mediciones también se pueden comparar, pero sin conversión automática de unidades. Así,
equals() devuelve TRUE solo si tanto el
valor como la unidad de medida son idénticos.
Ejemplo 47.12. Mediciones diferentes
// Define measurements
$unit = new Zend_Measure_Length(100, Zend_Measure_Length::CENTIMETER);
$unit2 = new Zend_Measure_Length(1, Zend_Measure_Length::METER);
if ($unit->equals($unit2)) {
print "Both measurements are identical";
} else {
print "These are different measurements";
}
Ejemplo 47.13. Mediciones idénticas
// Define measurements
$unit = new Zend_Measure_Length(100, Zend_Measure_Length::CENTIMETER);
$unit2 = new Zend_Measure_Length(1, Zend_Measure_Length::METER);
$unit2->setType(Zend_Measure_Length::CENTIMETER);
if ($unit->equals($unit2)) {
print "Both measurements are identical";
} else {
print "These are different measurements";
}
Para determinar si una medición es menor o mayor que otra, use
compare(), que devuelve 0, -1 o 1 según la diferencia
entre los dos objetos. Las mediciones idénticas devolverán 0. Las menores devolverán un
valor negativo, y las mayores un valor positivo.
Ejemplo 47.14. Diferencia
$unit = new Zend_Measure_Length(100, Zend_Measure_Length::CENTIMETER); $unit2 = new Zend_Measure_Length(1, Zend_Measure_Length::METER); $unit3 = new Zend_Measure_Length(1.2, Zend_Measure_Length::METER); print "Equal:".$unit2->compare($unit); print "Lesser:".$unit2->compare($unit3); print "Greater:".$unit3->compare($unit2);
Para cambiar el valor de una medición explícitamente, use
setValue() para sobrescribir el valor actual. Los parámetros son
los mismos que los del constructor.
Ejemplo 47.15. Cambiar un valor
$locale = new Zend_Locale('de_AT');
$unit = new Zend_Measure_Length(1,Zend_Measure_Length::METER);
$unit->setValue(1.2);
echo $unit;
$unit->setValue(1.2, Zend_Measure_Length::KILOMETER);
echo $unit;
$unit->setValue("1.234,56", Zend_Measure_Length::MILLIMETER,$locale);
echo $unit;
![[Note]](images/note.png)