>"Chris W. Parker" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
>Torsten Roehr <mailto:[EMAIL PROTECTED]>
on Monday, April 19, 2004 10:46 AM said:
>> the second approach is definitely much, much better and the right way
>> to go. But what exactly is your QUESTION?
>oh yeah.. umm... i guess at this point it would be "which is better?"...
>as i was writing the email it sort of went in a different direction than
>i had originally planned...
>> One personal suggestion: you could directly put the code from
>> initialize_customer() into the constructor.
>but i'm thinking that i might, at some point, want to use that method
>after the object has been instantiated. i can't think of a specific
>case, but i'm only imagining that it's possible.
OK, though I've not needed this anywhere else in my classes yet. But another
suggestion. You can save a lot of code by generalizing/abstracting the
assignment of your DB result to the class attributes. I'm doing this:
class Base
{
/**
* Sets properties based on supplied SQL result array with associative
indices
*
* @param array $dbResult
*/
function initFromResultSet($dbResult = array())
{
// if a non-empty SQL result set is supplied
if (is_array($dbResult) && count($dbResult) > 0)
{
// get class properties as array
$classProperties =
array_keys(get_class_vars(get_class($this)));
// array keys become object properties with respective value
foreach ($dbResult as $key => $value)
{
// only set values for properties that exist in
the class
if (in_array($key, $classProperties))
{
$this->$key = $value;
}
}
}
}
}
Then my 'real' class inherits from Base and calls the initFromResultSet()
method:
class Person extends Base() {
function Person($personID) {
// if a valid personID is supplied, get data from DB
if (Validate::number($personID, array('min' => 1)))
{
// get person data from DB
$query = 'SELECT * FROM ' . TABLE_PERSONS . '
WHERE personID = ' . $personID;
$DB_result =& $db->query($query);
// if person with given ID exists, set attributes
if (is_a($DB_result, 'DB_result') &&
$DB_result->numRows() == 1)
{
$this->initFromResultSet($DB_result->fetchRow());
}
// else set error and show list again
else {
// handle error
}
}
}
}
Of course the DB result must be an associative array with the column names
being equal to your class attributes. This saves a lot of code and can be
used in any class.
Regards,
Torsten
>chris.
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php