Pierwszy błąd: nie korzystasz z gotowych rozwiązań. Potrzebujesz ORM-a, więc na początek powinieneś skierować się w stronę Doctrine2. Potrzebujesz rejestracji/logowania, więc powinieneś skierować się w stronę Symfony/Zend/inny FW.
To o co pytasz i co opisujesz to ORM oparty o architekturę Active Record. Możesz podejrzeć sobie ORM Propel czy Doctrine w wersji 1.2.
Cytat
- logowanie - nie wiem jak je opatentować wogóle, przydała by się kolejna klasa czyż nie?
Raczej ciężko by użytkownik w sensie typ danych taki sam jak wspomniany wpis na blogu czy komentarz pod wpisem był używany jako mechanizm autoryzacji. Może on być co najwyżej jego częścią.
Cytat
- rejestracja - jest poprzez addUser(user ...)
Rejestracja podobnie jak logowanie to proces dosyć złożony - w końcu w jej skład wchodzi odebranie i przetworzenie danych od użytkownika (np. z formularza na stronie, bądź z "sieci" OpenID), utworzenie i zapisanie w jakiejś bazie danych mniej lub bardziej złożonej struktury reprezentującej użytkownika itp.
Ponownie, jeżeli skorzystał byś z gotowego rozwiązania, np. Symfony/Zend, nie musiałbyś zajmować się takimi pierdołami (szczególnie, że nie wiesz nawet jak się za nie zabrać).
Cytat
- może usuwanie użytkownika powinno być w klasie users() jako metoda del(user ...) przyjmująca instancję user? - To trochę bez sensu bo mając tylko id muszę najpierw tworzyć instancję user co jest równoznaczne z pobieraniem całego kompletu informacji na jego temat taka nadmiarowa praca...
Pobieranie użytkownika tylko po to by go usunąć rzeczywiście na pierwszy rzut oka nie ma sensu, ale:
1. Z reguły i tak będziesz potrzebować ten obiekt, bo przed usunięciem trzeba wykonać jakieś operacje na nim.
2. Nie wpłynie to negatywnie na aplikację.
3. Porządny, rozbudowany ORM będzie na tyle inteligentny, że nie koniecznie będzie pobierał jakiekolwiek dane z bazy w tym przypadku - chociaż nie wiem czy w PHP jest jakieś projekt obsługujący już taki "ficzer".
4. Będzie to najbardziej "poprawne", a przez to wygodne w użyciu rozwiązanie z punktu widzenia OOP - w końcu to paradygmat zakładający pracę na obiektach, a nie jakiś tam detali ich implementacji.
Cytat
Kolejnym pytaniem jest czy metody typu setNick moją od razu zapisywać dane w mysql, czy też poprzez $users->saveChange(user ...), a może po prostu poprzez $user->save()?
Natychmiastowe zapisywane danych byłoby bardzo złym pomysłem. Przy aktualizacji trzech właściwości czterech obiektów miałbyś 12 transakcji w bazie danych. A to z punktu widzenia wydajności i co ważniejsze spójności danych fatalne rozwiązanie.
Cytat
I czy przy takich założeniach klasa users powinna być modelem - takim typowym modelem z mvc? (W zand w katalogu models)
Model to najszersza z warstw w niemal każdej aplikacji webowej, i tak, ta klasa będzie jego częścią; A co to jest "Typowy model z MVC z Zenda" nawet nie wiem. Warstwa modelu ma tyle kompletnie różnych typów obiektów, że nie potrafię sobie wyobrazić, która jest "typowa".
Podsumowując: skorzystaj z gotowego rozwiązania do tak podstawowych rzeczy. Mój typ: Symfony2+Doctrine2 - bo korzystają z nowych elementów PHP wprowadzających odrobinę cywilizacji, a ich architektura jak i spora część kodu jest zerżnięta z najlepszych fragmentów innych projektów. A to niezwykle dobra cecha.