Спасибо всем за помощь.
Чтобы помочь будущим читателям этого вопроса, вот мое решение:
Я сохранил вышеописанный метод «createUserBySQL», я только изменил свой конструктор.
Конструктор теперь имеет все свои атрибуты в необязательной подписи, например:
function __construct($name = null, $surname = null ...)
Внутри конструктора я сделал проверку, чтобы убедиться, что все аргументы были нулевыми. Поскольку у меня их было 11, выполнение оператора if для всех было бы довольно раздражающим, поэтому я использовал метод func_get_args (), который возвращает массив со всеми аргументами, переданными в конструктор.
Конечный конструктор будет выглядеть примерно так:
function __construct($firstname = null, $surname = null, ...)
{
if (func_get_args() != null){
$this->firstname = $firstname;
$this->surname = $surname;
...
}
}