Чтобы передать в функцию параметр, надо - сюрприз! - заранее сказать ей об этом.
То есть если ты собираешься передать в функцию какое-то значение, которое потом будет использовано внутри, его надо описать при определении функции:
function foo($bar) {
echo $bar;
}
А если этого не сделать, то функция не будет знать, откуда у нее вдруг должна взяться переменная $bar.
Соответственно, чтобы твой код заработал, надо сказать конструктору, что в нем будет переменная $config
public function __construct(Config $config)
И вызывать эту функцию
в соответствии с данным определением. Это значит, что при определении функции указан 1 параметр, то при вызове надо писать тоже 1 параметр, а не 10.
То есть вместо
$db = new db($config->host, $config->user, $config->pass, $config->base, $config->charset);
должно быть
$db = new db($config);