- strtoupper: documentation ( source)
- strlen: documentation ( source)
<?php
namespace Blend\Model;
use SebastianBergmann\Money\Money;
abstract class MoneyFactory
{
public static function __callstatic($meth, array $args)
{
$meth = strtoupper($meth);
if (!self::isValidCurrency($meth)) {
throw new InvalidArgumentException("Unknown currency");
}
if (!isset($args[0])) {
throw new InvalidArgumentException("Missing amount");
}
return new Money($args[0] * 100, new Currency($meth));
}
private static function isValidCurrency($currency)
{
if (strlen($currency) != 3) {
return false;
}
try {
new Currency($currency);
} catch (InvalidArgumentException $e) {
return false;
}
return true;
}
}