TigerZF
🌐Español

47.4. Manipulación de mediciones

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.

47.4.1. Convertir

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);

47.4.2. Sumar y restar

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"


[Note] Conversión automática

Sumar un objeto a otro lo convertirá automáticamente a la unidad correcta. No es necesario llamar a convertTo() antes de sumar unidades diferentes.

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;


47.4.3. Comparar

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";
}


47.4.4. Comparar

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);


47.4.5. Cambiar valores manualmente

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;


47.4.6. Cambiar tipos manualmente

Para cambiar el tipo de una medición sin alterar su valor, use setType().

Ejemplo 47.16. Cambiar el tipo

$unit = new Zend_Measure_Length(1,Zend_Measure_Length::METER);
echo $unit; // outputs "1 m"

$unit->setType(Zend_Measure_Length::KILOMETER);
echo $unit; // outputs "1000 km"