Masz to całkowicie źle zaprojektowane. Postaram Ci się wyjaśnić jak to powinno być napisane, potem może ktoś mądrzejszy ode mnie się wypowie.
Jak dla mnie, to powinieneś wrzucać obiekt Db do obiektu Registration. Można to zrobić oczywiście statycznie dla całej klasy.
Registration::setDb( new Db() )
$foo = new Registration();
// ew.
// $foo = new Registration( new Db() );
Klasa Registration nie powinna filtrować danych! Od tego powinieneś mieć inną klasę (Valid) której wrzucasz tablice z wartościami ($_POST) następnie ustawiasz parametrami na podstawie których ma walidować, coś typu:
'name' => 'email',
'type' => 'email'
),
'name' => 'login',
'type' => 'string',
'min-len' => 3
)
);
// powiedzmy ze mamy w $_POST
// ['email'] => 'asdsadsa'
// ['login'] => 'blabla'
$valid = new Valid( $_POST, $data );
if( $valid->start() ){ // sprawdzamy czy dane w $_POST są poprawne względem $data
// Odpalamy Registration
}
else{
// rzucamy tablice ze stałymi (define) błędów, które popełniono oraz pola w których to uczyniono do Smarty...
$smarty -> assign( 'valid_err', $valid->getErrors() );
}
Registration powinien zaraz wywalać wyjątek jeśli jest user o danym emailu lub loginie.
Języków używasz po stronie szablonów nie w kodzie PHP, tym bardziej w klasach!
PS:
Cytat
I jeszcze jest chyba konwencja że te wszystkie zmienne klasy (jak to sie nazywało... metody?) public $cos, dajemy pomiędzy $ a nazwą underscore'a?
Metody to są "funkcje klasy". "Zmienne" są nazywane właściwościami (ew. polami). To o czym mówisz stosuje się dla elementów o dostępie prywatnym.
class A
{
private $_foo;
public $bar;
private function _setFoo(){
//
}
public function getBarr(){
//
}
}
@editAha, wg. mnie powinieneś mieć klasę Auth(), która odpowiada za rejestracje, logowanie itp. a nie tylko odpowiadającą za rejestracje. Poza tym wywal nazwę tabelek i pól z bazy do jakiegoś configa.