Re: green bean question on singleton php5

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Jan 16, 2008 4:55 PM, Jochem Maas <jochem@xxxxxxxxxxxxx> wrote:
> Eric Butera schreef:
>
> > On Jan 16, 2008 4:13 PM, Nathan Nobbe <quickshiftin@xxxxxxxxx> wrote:
> >> On Jan 16, 2008 3:59 PM, Jochem Maas <jochem@xxxxxxxxxxxxx> wrote:
> >>
> >>> given that dbaccess doesn't extend mysqli instantiation of dbaccess is
> >>> completely
> >>> pointless no?
> >>
> >> i dont know; i think using an instance of dbaccess to control a single
> >> instance of the
> >> mysqli class is appropriate.  personally, i wouldnt extend mysqli unless i
> >> had a good
> >> reason to.  i would probly only rationalize this if i wanted to override
> >> some of the behavior
> >> in a specific way, or extend it in some meaningful way (even then i might
> >> use composition).
> >> if that isnt the intention i think composition is the best choice for the
> >> singleton.
> >> more a matter of preference than anything i suppose.  at least i cant think
> >> of a better reason
> >> to argue for composition.
> >>
> >>
> >>> no idea what you mean
> >>
> >> ya; some of these posts from you are a little hard to understand, julian.
> >>
> >> -nathan
> >>
> >
> > I still don't understand the obsession of a singleton in regards to a
> > db connection.  Using a registry is a much better practice I think.
> >
>
> I think I alluded to the registry pattern in my reply above - although I'm not
> sure. could you care to ellaborate what you mean by registry?
>

Sure.  A registry is just a place to store things.  So create an
instance of your DB and stick it in the registry and you're done.
Then make your script rely on the registry so you can swap stuff out
that way instead of having a hard coded reference to some static
method that cannot be replaced at runtime.

Also with the registry you can use lazy loading.  My scripts don't
create an instance of the db class until it is actually used.  It has
the ability to create one at any time by calling the
fancy_namespace_Registry::get('db') which will read some config I
enabled upstream with the fancy_namespace_Registry::lazy('db',
array(config to pass)).  In testing I can just replace the db entry
with a mock and life is good.

Also, my database doesn't connect to the server until an actual method
is called that uses it.  So just layers of just in time.

Of course you could argue that using static methods in the registry is
bad too, but I gotta draw the line somewhere! :)  There isn't really a
right or wrong.  Just different ways of doing things.  I used to use
the singleton with my DB but it became troublesome to test plus always
making sure the dependences were pre-loaded was annoying.  Now
everything takes care of itself.

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux