Ciao m4V1, grazie per avermi risposto. Sono riuscito a far funzionare il tutto solo che non so se ho rispettato il pattern e alla fine ho utilizzato una doppia dipendenza; oltre a quella fra CurrencyConverter e CurrencyWebservice ho creato anche quella fra Customer e CurrencyConverter. Di seguito il codice:
codice:
require_once("./models/Customer.php");
$id = $argv[1];
if(!isset($id) || !is_numeric($id)) {
echo "Argomento non valido. Esecuzione interrotta\n";
echo "Si prega di inserire un intero\n";
exit;
}
$customer = new Customer($id, new CurrencyConverter( new CurrencyWebservice() ));
foreach ($customer->getTransactions() as $transaction) {
echo $transaction."\n";
}
codice:
require_once("./models/CurrencyConverter.php");
class Customer
{
private $id;
private $currencyConverter;
public function __construct($id, CurrencyConverter $currencyConverter) {
$this->id = $id;
$this->currencyConverter = $currencyConverter;
}
public function getTransactions()
{
$i = 1;
$result = array();
if (($handle = fopen("data.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle)) !== FALSE) {
if($i>1) {
$line = explode(";",$data[0]);
if($line[0] == $this->id) {
$new_value = $this->currencyConverter->convert($line[2]);
$row = "Transazione del $line[1]: $line[2] ==> €$new_value";
array_push($result, $row);
}
}
$i++;
}
fclose($handle);
}
return $result;
}
}
codice:
require_once("./models/CurrencyWebservice.php");
class CurrencyConverter
{
private $webservice;
public function __construct(CurrencyWebservice $currencyWebservice) {
$this->webservice = $currencyWebservice;
}
public function convert($amount)
{
$amount = str_replace('"', "", $amount);
$currency = substr($amount,0,1);
$value = substr($amount,1);
$rate = $this->webservice->getExchangeRate($currency);
return $rate*$value;
}
}
codice:
class CurrencyWebservice{
private $currencies = array("s"=>1.20,"$"=>0.95,"e"=>1);
public function getExchangeRate($currency)
{
if (array_key_exists($currency, $this->currencies)) {
return $this->currencies[$currency];
} else {
return 0;
}
}
}
Spero sia corretto