public static final function getByName($name)
{
$name = (string) $name;
$class = get_called_class();
if (isset(self::$instances[$class][$name])) {
return self::$instances[$class][$name];
}
$const = $class . '::' . $name;
if (!defined($const)) {
throw new InvalidArgumentException($const . ' not defined');
}
return self::$instances[$class][$name] = new $class(constant($const));
}