Zend_Currency-Exchange.xml 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.currency.exchange">
  5. <title>Echanger (convertir) des monnaies</title>
  6. <para>
  7. Dans la section précédente, nous avons parlé des calculs sur les monnaies. Mais comme vous pouvez imaginer,
  8. calculer des monnaies peut vite mener à des calculs internationnaux (entre pays différents).
  9. </para>
  10. <para>
  11. Dans un tel cas, les monnaies doivent être converties avec un taux. Les taux officiels sont conservés
  12. par les banques ou encore les journaux. Dans le Web, des services de conversion existent.
  13. <classname>Zend_Currency</classname> permet leur utilisation par fonction de rappel.
  14. </para>
  15. <para>
  16. D'abord, écrivons un service de change simple.
  17. </para>
  18. <programlisting language="php"><![CDATA[
  19. class SimpleExchange implements Zend_Currency_CurrencyInterface
  20. {
  21. public function getRate($from, $to)
  22. {
  23. if ($from !== "USD") {
  24. throw new Exception('On ne change que des USD');
  25. }
  26. switch ($to) {
  27. case 'EUR':
  28. return 2;
  29. case 'JPE':
  30. return 0.7;
  31. }
  32. throw new Exception('Impossible de changer vers $to');
  33. }
  34. }
  35. ]]></programlisting>
  36. <para>
  37. Nous venons de créer un service de change manuellement.
  38. </para>
  39. <para>
  40. Votre classe de service de change doit implémenter
  41. <classname>Zend_Currency_CurrencyInterface</classname>. Cette interface
  42. définit une seule méthode <methodname>getRate()</methodname>, qui prend deux paramètres :
  43. les noms courts des monnaies. <classname>Zend_Currency</classname> a besoin que le taux de change
  44. soit retourné.
  45. </para>
  46. <para>
  47. Dans un service réel, vous demanderiez au fournisseur les taux de change, dans notre exemple nous les
  48. codons en dur.
  49. </para>
  50. <para>
  51. Attachons maintenant notre classe avec <classname>Zend_Currency</classname>. Ceci se fait de deux manières
  52. , soit en attachant l'objet ou en attachant le nom de sa classe.
  53. </para>
  54. <programlisting language="php"><![CDATA[
  55. $currency = new Zend_Currency(
  56. array(
  57. 'value' => 1000,
  58. 'currency' => 'EUR',
  59. )
  60. );
  61. $service = new SimpleExchange();
  62. // attachons le service de change
  63. $currency->setService($service);
  64. $currency2 = new Zend_Currency(
  65. array(
  66. 'value' => 1000,
  67. 'currency' => 'USD',
  68. )
  69. );
  70. print $currency->add($currency2);
  71. ]]></programlisting>
  72. <para>
  73. L'exemple ci-dessus retournera '$ 3.000' car 1.000 <acronym>USD</acronym> seront convertis avec
  74. un taux de 2 vers 2.000 <acronym>EUR</acronym>.
  75. </para>
  76. <note>
  77. <title>Calcul sans service de change</title>
  78. <para>
  79. Si vous tentez des calculs avec deux monnaies de types différents et qu'aucun service de change
  80. n'a été précisé, une exception sera levée.<classname>Zend_Currency</classname> ne sait pas
  81. nativement passer d'une monnaie à une autre.
  82. </para>
  83. </note>
  84. </sect1>