Zend_Currency-Exchange.xml 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 24249 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="zend.currency.exchange">
  5. <title>Währungen wechseln</title>
  6. <para>
  7. Im vorherigen Abschnitt haben wir die Berechnung der Währung besprochen. Aber wie man sich
  8. vorstellen kann bedeutet das Rechnen mit Währungen oft das man mit unterschiedlichen
  9. Währungen von verschiedenen Ländern rechnen will.
  10. </para>
  11. <para>
  12. In diesem Fall müssen die Währungen gewechselt werden so dass beide die selbe Währung
  13. verwenden. Im wirklichen Leben ist diese Information von Banken oder Tageszeitungen
  14. erhältlich. Aber wir sind im Web, also sollten wir vorhandene Wechselservices verwenden.
  15. <classname>Zend_Currency</classname> erlaubt deren Verwendung mit einem einfachen Callback.
  16. </para>
  17. <para>
  18. Zuerst schreiben wir ein einfaches Umrechnungsservice.
  19. </para>
  20. <programlisting language="php"><![CDATA[
  21. class SimpleExchange implements Zend_Currency_CurrencyInterface
  22. {
  23. public function getRate($from, $to)
  24. {
  25. if ($from !== "USD") {
  26. throw new Exception('Wir können nur USD umrechnen');
  27. }
  28. switch ($to) {
  29. case 'EUR':
  30. return 2;
  31. case 'JPE':
  32. return 0.7;
  33. }
  34. throw new Exception('$to kann nicht umgerechnet werden');
  35. }
  36. }
  37. ]]></programlisting>
  38. <para>
  39. Wir haben jetzt ein manuelles Umrechnungsservice erstellt. Es passt nicht im wirklichen
  40. Leben, aber es zeigt wie die Umrechnung von Währungen arbeitet.
  41. </para>
  42. <para>
  43. Unsere Umrechnungsklasse muss das <classname>Zend_Currency_CurrencyInterface</classname>
  44. Interface implementieren. Diese Interface erwartet das die einzige Methode
  45. <methodname>getRate()</methodname> implementiert wird. Diese Methode hat zwei Parameter
  46. die Sie empfängt. Beide sind die Kurznamen für die angegebenen Währungen.
  47. <classname>Zend_Currency</classname> auf der anderen Seite erwartet dass der
  48. Umrechnungsfaktor zurückgegeben wird.
  49. </para>
  50. <para>
  51. In einer lebenden Umrechnungsklasse wird man warscheinlich einen Serviceprovider nach den
  52. richtigen Umrechnungsfaktoren fragen. Für unser Beispiel ist der händische Faktor in
  53. Ordnung.
  54. </para>
  55. <para>
  56. Jetzt verbinden wir unsere Umrechnungsklasse einfach mit
  57. <classname>Zend_Currency</classname>. Es gibt zwei Wege mit denen das getan werden kann.
  58. Entweder durch Anhängen einer Instanz der Umrechnungsklasse, oder einfach durch Angabe eines
  59. Strings mit dem Klassennamen.
  60. </para>
  61. <programlisting language="php"><![CDATA[
  62. $currency = new Zend_Currency(
  63. array(
  64. 'value' => 1000,
  65. 'currency' => 'EUR',
  66. )
  67. );
  68. $service = new SimpleExchange();
  69. // Das Umrechnungsservice anfügen
  70. $currency->setService($service);
  71. $currency2 = new Zend_Currency(
  72. array(
  73. 'value' => 1000,
  74. 'currency' => 'USD',
  75. )
  76. );
  77. print $currency->add($currency2);
  78. ]]></programlisting>
  79. <para>
  80. Um obigen Beispeil wird '$ 3.000' zurückgegeben weil die 1.000 <acronym>USD</acronym> mit
  81. dem Faktor 2 in 2.000 <acronym>EUR</acronym> umgerechnet werden.
  82. </para>
  83. <note>
  84. <title>Kalkulation ohne Umrechnungsservice</title>
  85. <para>
  86. Wenn man versucht zwei Währungsobjekte zu berechnen wenn diese nicht die selbe Währung
  87. haben und kein Umrechnungsservice angehängt wurde, erhält man eine Exception. Der Grund
  88. hierfür ist, dass <classname>Zend_Currency</classname> dann nicht mehr in der Lage ist
  89. zwischen verschiedenen Währungen zu wechseln.
  90. </para>
  91. </note>
  92. </sect1>