L'analyse et la normalisation de l'entrée, combinées avec le récupération suivant les notations régionalisées rend des données accessibles aux utilisateurs dans différentes régions. Beaucoup de méthodes additionnelles existent dans des composants Zend_Measure_*
pour manipuler et travailler ces données, après qu'elles aient été normalisées.
Le dispositif le plus important est probablement la conversion dans différentes unités de la mesure. La conversion d'une unité peut être faite à tout moment en utilisant la méthode convertTo()
. Des unités de mesure peuvent seulement être converties en d'autres unités du même type (classe). Par conséquent, il n'est pas possible de convertir (par exemple : une longueur en poids), qui encouragerait des pratiques de programmation pauvres et entraînerait la propagation d'erreurs sans lever d'exceptions.
Exemple 21.10. Convert
<?php require_once 'Zend/Measure/Weight.php'; $locale = new Zend_Locale('de'); $machaine = "1.234.567,89"; $unite = new Zend_Measure_Weight($machaine,'POND', $locale); print "Kilo : ".$unite->convertTo('KILOGRAM'); // affiche "Kilo : 617283.945 kg" // l'utilisation de constantes est considérée comme une meilleure pratique que les chaînes print "Tonne : ".$unite->convertTo(Zend_Measure_Weight::TON); // affiche "Tonne : 617.283945 t" ?>
Les mesures peuvent être ajoutées en utilisant add()
et soustraites en utilisant sub()
. Chaque addition créera un nouvel objet pour le résultat. L'objet courant ne sera jamais changé par la classe. Le nouvel objet sera du même type que l'objet de début. Les objets dynamiques soutiennent un modèle fluide de la programmation, où des ordres complexes des opérations peuvent être imbriqués sans risque d'effets secondaires changeant les objets d'entrée.
Exemple 21.11. Ajouter des mesures
<?php require_once 'Zend/Measure/Length.php'; // Définition des objets $unite1 = new Zend_Measure_Length(200, Zend_Measure_Length::CENTIMETER); $unite2 = new Zend_Measure_Length(1, Zend_Measure_Length::METER); // ajouter l'$unite2 à l'$unite1 $somme = $unite1->add($unite2); echo $somme; // affiche "300 cm" ?>
Conversion automatique | |
---|---|
Ajouter un objet à l'autre le convertira automatiquement en dans l'unité correcte. Il n'est pas nécessaire d'appeler |
Exemple 21.12. Soustraire des mesures
La soustraction des mesures fonctionne comme l'addition.
<?php require_once 'Zend/Measure/Length.php'; // Définition des objets $unite1 = new Zend_Measure_Length(200, Zend_Measure_Length::CENTIMETER); $unite2 = new Zend_Measure_Length(1, Zend_Measure_Length::METER); // soustriare l'$unite2 de l'$unite1 $somme = $unite1->sub($unite2); echo $somme; // affiche "100 cm" ?>
Les mesures peuvent également être comparées, mais sans conversion automatique de l'unité. De plus, equals()
retourne TRUE
, seulement si la valeur et l'unité de mesure sont identiques.
Exemple 21.13. Mesures différentes
<?php require_once 'Zend/Measure/Length.php'; // Définition des mesures $unite1 = new Zend_Measure_Length(100, Zend_Measure_Length::CENTIMETER); $unite2 = new Zend_Measure_Length(1, Zend_Measure_Length::METER); if ($unite1->equals($unite2)) { print "Les mesures sont identiques"; } else { print "Les mesures sont différentes"; } // affiche "Les mesures sont différentes" ?>
Exemple 21.14. Mesures identiques
<?php require_once 'Zend/Measure/Length.php'; // Définition des mesures $unite1 = new Zend_Measure_Length(100, Zend_Measure_Length::CENTIMETER); $unite2 = new Zend_Measure_Length(1, Zend_Measure_Length::METER); $unite2->setType(Zend_Measure_Length::CENTIMETER); if ($unite1->equals($unite2)) { print "Les mesures sont identiques"; } else { print "Les mesures sont différentes"; } // affiche "Les mesures sont identiques" ?>
Pour déterminer si une mesure est plus ou moins grande qu'une autre, il faut utiliser compare()
, qui renvoie 0, -1 ou 1 selon la différence entre les deux objets. Les mesures identiques renverront 0. Plus petit renverra -1 et plus grand renverra +1.
Exemple 21.15. Différence
<?php require_once 'Zend/Measure/Length.php'; $unite1 = new Zend_Measure_Length(100, Zend_Measure_Length::CENTIMETER); $unite2 = new Zend_Measure_Length(1, Zend_Measure_Length::METER); $unite3 = new Zend_Measure_Length(1.2, Zend_Measure_Length::METER); print "Egalité : ".$unite2->compare($unite1); // affiche "Egalité : 0" print "Plus petit que : ".$unite2->compare($unite3); // affiche "Plus petit que : -1" print "Plus grand que : ".$unite3->compare($unite2); // affiche "Plus grand que : 1" ?>
Pour changer explicitement la valeur d'une mesure, il faut utiliser setValue()
pour surcharger la valeur courante. Les paramètres sont identiques à ceux du constructeur.
Exemple 21.16. Changer une valeur
<?php require_once 'Zend/Measure/Length.php'; $locale = new Zend_Locale('de_AT'); $unite = new Zend_Measure_Length(1,Zend_Measure_Length::METER); $unite->setValue(1.2); echo $unite; // affiche "1.2 m" $unite->setValue(1.2, Zend_Measure_Length::KILOMETER); echo $unite; // affiche "1200 km" $unite->setValue("1.234,56", Zend_Measure_Length::MILLIMETER,$locale); echo $unite; // affiche "1234.56 mm" ?>
Pour changer le type d'une mesure sans altérer sa valeur, il faut utiliser setType()
.