public static function populateNew($class, array $row) {
        if (static::class != __CLASS__)                  throw new IllegalAccessException('Cannot access method '.__METHOD__.'() on a derived class.');
        if (!is_a($class, __CLASS__, $allowString=true)) throw new InvalidArgumentException('Not a '.__CLASS__.' subclass: '.$class);

        /** @var self $object */
        $object = new $class();
        $object->populate($row);
        return $object;
    }