2009/10/12 Stephan Ebelt <s...@shared-files.de>:
> as far as I understood/use it: I try to hardcode as many workable defaults in
> the vo class as possible (ie. see $subject in the example). Then I create
> by passing result records from the database (arrays) to the constructor. That
> either returns a object or crashes the application if something is wrong.
> Optionally I can create objects without any passed-in parameter which will
> one with only the defaults set. Depending on the class' definition those may
Ok, I'm going to make a case against the use of default values
hard-coded within the class here:
a) Default values mean more code.
The less code you have, the less bugs. Just strip the defaults out,
and they'll never cause errors.
b) Default values hide missing values.
If a value gets mislaid during the build process, the class will still
work, kinda, sortof, but it won't behave as expected. Better to exit
loudly and let the build manager fix the missing value, rather than
try to muddle through on partial data, and fail /really/ impressively
further down the road.
c) You should store all your config options in the same place.
This is simply good practice - it makes life easier for anyone coming
after you who knows that /everything/ is in one place. Zend_Config is
a nice approach - the Config object parses an ini file, and you pass
fragments of the config object to your class constructors. Eg:
$conf = new Zend_Config_Ini( 'config/settings.ini', 'live' );
$db = Zend_Db::factory( $conf->application->databasesettings );
d) Default values lead to assumptions.
MyClass assumes that DbClass connects to localhost if nothing is
passed. This means that MyClass is relying on a feature of DbClass
where it doesn't strictly have to, and DbClass is a little bit less of
a black box.
e) Defaults aren't.
What makes sense on one machine (eg a default of 'localhost' for the
db) may not make sense on another. Rather than tweak the class
defaults to fit the local conditions every time you deploy it, and
have dozens of slightly different versions hanging around, just be
explicit and push the parameters in from outside.
Comments welcome of course, but I've strayed off PHP and into OO design, here.
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php