Stephan Ebelt wrote:
> On Mon, Oct 05, 2009 at 05:48:32PM -0700, Jim Lucas wrote:
>> Here is a problem that I have had for years now. I have been trying to come
>> up
>> with the perfect solution for this problem. But, I have come down to two
>> different methods for solving it.
>>
>> Here is the problem...
>
> [...]
>
>> Now, we all have a function or method like this floating around somewhere.
>>
>> My question is, how do YOU go about setting the required entries of the
>> $headers
>> array() ?
>>
>
> [...]
>
>> END of examples...
>>
>> Now, IMO, the last one is the simplest one and for me, I think it will be the
>> new way that I solve this type of problem.
>>
>> But, my question that I put out to all of you is...
>>
>> How would you solve this problem?
>
> I have use this array_merge() approach mentioned in other posts for
> quite some time but found that it introduced many bugs when fieldnames
> changed.
> Ie. if the defaults come from a database table and I changed the schema it
> caused undefined values during the merging and - worse - sometimes messed up
> the
> inner workings of functions...
>
> Then I heard of the "value object" approach somewhere and found that much more
> solid. One would basically define a class where default values are represented
> by its properties. Ie:
>
> class vo_email extends vo {
> public $to = '';
> public $from = '';
> public $subject = '(no subject)';
> public $body = '';
> ...
> }
>
> the constructor can make sure that absolutly necessary values are required and
> set properly - and could complain if something is not right. There could be
> methods that add() or set() or change() things. These could also be inherited
> from a very generic class "vo" so that this stuff is written once and applies
> to all sorts of defaults in the program.
> In my app the inherited constructor accepts arrays as parameter and assigns
> their elements to the object properties and - by that - overwrites the default
> settings. If elements do not match with the defined properties it will trigger
> a very visible call trace.
>
> A function like sendEmail() would then require a object of type vo_email as
> parameter and would work with its properties internally and can rely on it as
> the vo's constructor should have catched anything bad.
>
> If additional logic for the input values is required, it can be added easily:
>
> class dao_email extends vo_email {
> ...
> public function encode_body() {
> ...
> }
>
> public function sanitize_mail_address() {
>
> }
> ...
> }
>
This is a very interesting approach. How would you initialize the class? Using
a Singleton Method, or a Globally available class variable?
> sendEmail() would then require a dao_email object (dao=data access object) as
> input.
>
> stephan
>
>> TIA
>>
>> Jim Lucas
>>
>> --
>> PHP General Mailing List (http://www.php.net/)
>> To unsubscribe, visit: http://www.php.net/unsub.php
>
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php