| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="zend.currency.exchange">
- <title>Echanger (convertir) des monnaies</title>
- <para>
- Dans la section précédente, nous avons parlé des calculs sur les monnaies. Mais comme vous pouvez imaginer,
- calculer des monnaies peut vite mener à des calculs internationnaux (entre pays différents).
- </para>
- <para>
- Dans un tel cas, les monnaies doivent être converties avec un taux. Les taux officiels sont conservés
- par les banques ou encore les journaux. Dans le Web, des services de conversion existent.
- <classname>Zend_Currency</classname> permet leur utilisation par fonction de rappel.
- </para>
- <para>
- D'abord, écrivons un service de change simple.
- </para>
- <programlisting language="php"><![CDATA[
- class SimpleExchange implements Zend_Currency_CurrencyInterface
- {
- public function getRate($from, $to)
- {
- if ($from !== "USD") {
- throw new Exception('On ne change que des USD');
- }
- switch ($to) {
- case 'EUR':
- return 2;
- case 'JPE':
- return 0.7;
- }
- throw new Exception('Impossible de changer vers $to');
- }
- }
- ]]></programlisting>
- <para>
- Nous venons de créer un service de change manuellement.
- </para>
- <para>
- Votre classe de service de change doit implémenter
- <classname>Zend_Currency_CurrencyInterface</classname>. Cette interface
- définit une seule méthode <methodname>getRate()</methodname>, qui prend deux paramètres :
- les noms courts des monnaies. <classname>Zend_Currency</classname> a besoin que le taux de change
- soit retourné.
- </para>
- <para>
- Dans un service réel, vous demanderiez au fournisseur les taux de change, dans notre exemple nous les
- codons en dur.
- </para>
- <para>
- Attachons maintenant notre classe avec <classname>Zend_Currency</classname>. Ceci se fait de deux manières
- , soit en attachant l'objet ou en attachant le nom de sa classe.
- </para>
- <programlisting language="php"><![CDATA[
- $currency = new Zend_Currency(
- array(
- 'value' => 1000,
- 'currency' => 'EUR',
- )
- );
- $service = new SimpleExchange();
- // attachons le service de change
- $currency->setService($service);
- $currency2 = new Zend_Currency(
- array(
- 'value' => 1000,
- 'currency' => 'USD',
- )
- );
- print $currency->add($currency2);
- ]]></programlisting>
- <para>
- L'exemple ci-dessus retournera '$ 3.000' car 1.000 <acronym>USD</acronym> seront convertis avec
- un taux de 2 vers 2.000 <acronym>EUR</acronym>.
- </para>
- <note>
- <title>Calcul sans service de change</title>
- <para>
- Si vous tentez des calculs avec deux monnaies de types différents et qu'aucun service de change
- n'a été précisé, une exception sera levée.<classname>Zend_Currency</classname> ne sait pas
- nativement passer d'une monnaie à une autre.
- </para>
- </note>
- </sect1>
|