Hello,
I'm working on a project now and I'd like to get some feedback on how to
implement a proper class (or two).
This is an application that records an employee's used vacation time.
There are two tables: (1) events, (2) users.
Users:
id (int)
name (varchar)
email (varchar)
balance (mediumint, stored in seconds) // this is the balance for
// the user after all events
// have been accounted for.
accrual (smallint, stored in seconds)
is_manager (bool)
Events:
id (int)
uid (int, users.id)
date (date)
duration (smallint, stored in seconds)
balance (smallint, stored in seconds) // this is the balance for
// the user at the time the
// event was added.
created (datetime)
Currently I have just one class called User that looks like this:
(I'm dealing with PHP4.)
class User
{
var id;
var name;
var email;
var balance;
var accrual;
var is_manager;
function User($user_id)
{
$this->id = $user_id;
$this->name = get_name();
// ...
$this->accrual = get_accrual();
}
function get_name()
{
// get name from db
$sql = "...";
$db =& DB::singleton();
$db->execute($sql);
}
function get_email()
function get_accrual()
function is_manager()
{
// same as above more or less
}
function get_events()
{
// this function gets all the events for
// the current users and returns them
// as an array.
}
function add_event()
{
// this function adds a single event for
// the current user. it also recalculates
// the 'balance' for each event because
// of data display requirements.
}
function del_event($event_id)
{
// delete an event from the current user's
// events list based on $event_id.
}
}
As I started to write this and use it I get the feeling that there
should also be an Event class that is extended by the User class. Reason
being that each User object is a reference to the currently logged in
user, not anyone else. But if you're a manager you have the
responsibility to approve/deny and/or add/delete events for your
employees.
But with that in mind I've gone from a class that handles the currently
logged in user to one that handles the currently logged in user plus any
number of other users.
I guess I'm thinking of this in the same terms as db normalization. Ex:
I could add an extra price_level column to my products table each time I
need a new pricing level but it's probably better to create a separate
table called products_prices. It's slightly more complicated but it
would allow me to have as many pricing levels as I want without
modifying my databse or code.
I'd appreciate any kind of feedback on this. If I haven't been clear
with something please let me know.
Thanks,
Chris.
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php