On Sun, 2003-09-21 at 14:10, Gerard Samuel wrote:
> Robert Cummings wrote:
> 
> >Are you looking to create a single point of access to any libraries your
> >application may wish to use
> >
> Yes.  Instead of juggling 5-6 objects, just move around one object.
> 
> > and to subsequently base this on a singleton
> >pattern (only one instance of the object may exist?)?
> >
> Yes.  Currently in my code, there is the ADODB object, which is used as 
> normal.
> I pass this object by reference to Smarty so its plugins can access the 
> DB if neccessary,
> and two other classes that need DB access.  Im going on the assumption, 
> that
> if one doesn't have to pass by reference, then dont do it, especially 
> large objects,
> and having multiple copies of them.
> 
> All of this is just a thought.  Whether its feasable, is another story 
> for my app....

This may be seem like a shameless plug but I think it's relevant. In the
InterJinn framework i created I had a similar issue. PHP has the
horrible issue that when passing objects around it copies them (this is
fixed in PHP5 from what I hear). This causes extra processing to copy
large objects which have big data sets, and makes it extremely difficult
to properly implement a singleton pattern. In the InterJinn framework
what I did was create a wrapper class, but rather than having other
classes extend it, I have a core loader service which takes a string
name as a parameter and returns the associated object (database,
session, cache, etc.). The returned object however is not the actual
object, but rather an instance of the wrapper class with a single
instance variable called do, the do variable is a reference to the real
object. Thus if someone copies the returned object they only copy the
wrapper, and the internal reference is maintained. It makes for slightly
odd syntax:

    $dbManager->do->getConnection( 'default' );

but the cost of the intermediate lookup is extremely small and it
prevents issues where copies of an expected singleton are made. In cases
where a user wants to optimize and actually work with the references,
they can always do:

    $dbManager = &$this->getServiceRef( 'databaseManager' )
    $db = $dbManager->getConnection( 'default' );

instead of the nanoscopically slower:

    $dbmanager = $this->getService( 'databaseManager' );
    $db = $dbManager->do->getConnection( 'default' );

Anyways maybe that will help you with your own problem.

Cheers,
Rob.
-- 
.------------------------------------------------------------.
| InterJinn Application Framework - http://www.interjinn.com |
:------------------------------------------------------------:
| An application and templating framework for PHP. Boasting  |
| a powerful, scalable system for accessing system services  |
| such as forms, properties, sessions, and caches. InterJinn |
| also provides an extremely flexible architecture for       |
| creating re-usable components quickly and easily.          |
`------------------------------------------------------------'

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

Reply via email to