Sometimes it helps to look at these kinds of interactions in a class interaction diagram of sorts. Given that you have a
User object, one of it's actions is going to be
LogIn. I would propose instantiating a
User with as small an amount of data as possible (could it just be a username or id?) and let the methods take care of populating the rest of members for you. In example, I would look at doing something like this:
$U = User->new( $user_name );
# at this point there is a minimal amount of data for the User object,
+ but it should still be functional
$U->LogIn();
# handles all of the database connection activity, loads in user info
+as well as populates project list, etc.
HTH ... actually, HTII (Hope This Isn't Incoherent)