En la sección anterior hablamos sobre los cálculos con divisas. Pero, como puede imaginar, calcular divisas a menudo implica calcular divisas diferentes de distintos países.
En este caso, las divisas deben intercambiarse para que ambas usen la misma divisa.
En la vida real, esta información la proporcionan los bancos o la prensa diaria. Pero como
estamos en la web, deberíamos usar los servicios de cambio disponibles.
Zend_Currency permite su uso mediante un simple callback.
Primero, escribamos un servicio de cambio sencillo.
class SimpleExchange implements Zend_Currency_CurrencyInterface
{
public function getRate($from, $to)
{
if ($from !== "USD") {
throw new Exception('We can only exchange USD');
}
switch ($to) {
case 'EUR':
return 2;
case 'JPE':
return 0.7;
}
throw new Exception('Unable to exchange $to');
}
}
Hemos creado ahora un servicio de cambio manual. No encajará en la vida real, pero muestra cómo funciona el intercambio de divisas.
Su clase de intercambio debe implementar la interfaz
Zend_Currency_CurrencyInterface. Esta interfaz
requiere que se implemente el único método getRate(). Este
método recibe dos parámetros. Ambos son los nombres cortos de las
divisas indicadas. Zend_Currency, por su parte, necesita que se
devuelva la tasa de cambio.
En una clase de intercambio real, probablemente consultaría al proveedor del servicio para obtener las tasas de cambio correctas. Para nuestro ejemplo, la tasa manual será suficiente.
Ahora simplemente vincularemos nuestra clase de intercambio con Zend_Currency.
Hay dos formas de hacerlo. Bien vinculando una instancia de la clase Exchange, o
simplemente indicando una cadena con el nombre de la clase.
$currency = new Zend_Currency(
array(
'value' => 1000,
'currency' => 'EUR',
)
);
$service = new SimpleExchange();
// attach the exchange service
$currency->setService($service);
$currency2 = new Zend_Currency(
array(
'value' => 1000,
'currency' => 'USD',
)
);
print $currency->add($currency2);
El ejemplo anterior devolverá '$ 3.000' porque los 1.000 USD serán convertidos con una tasa de 2 a 2.000 EUR.
![]() |
Cálculo sin servicio de cambio |
|---|---|
Cuando intente calcular dos objetos de divisa que no usen la misma divisa
y no tengan ningún servicio de cambio vinculado, obtendrá una excepción. La razón es
que |
![[Note]](images/note.png)