NYCPHP Meetup

NYPHP.org

[nycphp-talk] How to create a singleton class in PHP

Phil Powell phillip.powell at adnet-sys.com
Thu Feb 12 14:01:05 EST 2004


This is what I wrote based on your code:

class ActionHandler {
 
  function &ActionHandler() {} // LEAVE IT EMPTY

  function &getErrorArray() {
    return ActionHandler::setErrorArray();
  }

  function &setErrorArray($additionalErrorArray = null) {
   static $errorArray = array();
   if (is_array($additionalErrorArray)) $errorArray += 
$additionalErrorArray;
   return $errorArray;
  }

}

so basically I am assuming that ActionHandler does not create a static 
instance of $this->errorArray but instead ActionHandler::setErrorArray() 
creates a static instance of a localized $errorArray which, since only 
one instance of ActionHandler exists, only one instance of the method 
exists, then only one instance of the localized variable exists and and 
that is that.  Am I off-base?

Phil

Dan Cech wrote:

> Ok, now we have something that works!  Which one works?
>
> Both should function just fine, in each case there should only ever be 
> one instance of the $errorArray variable, whether it is a static or 
> global.
>
> The reason the code is much simpler than what you had previously is 
> that it is not designed to try and store an instance of ActionHandler, 
> but only an instance of the errorArray variable.
>
> Dan
>
> Phil Powell wrote:
>
>> Dan Cech wrote:
>>
>>> Hmm, that is very similar to the GLOBALS kludge I posted, although 
>>> it doesn't work on my machine.  Each subsequent call to 
>>> setErrorArray is overwriting the error array.
>>>
>>> Thus far the best I've got is:
>>>
>>> class ActionHandler {
>>>   function &getErrorArray () {
>>>     return ActionHandler::setErrorArray ();
>>>   }
>>>
>>>   function &setErrorArray ($additionalErrorArray = NULL) {
>>>     static $errorArray = array ();
>>>
>>>     if ( is_array ($additionalErrorArray) ) {
>>>       $errorArray += $additionalErrorArray;
>>>     }
>>>
>>>     return $errorArray;
>>>   }
>>> }
>>>
>>> and for the $GLOBALS kludge:
>>>
>>> class ActionHandler {
>>>   function &getErrorArray () {
>>>     return ActionHandler::setErrorArray ();
>>>   }
>>>
>>>   function &setErrorArray ($additionalErrorArray = NULL) {
>>>     if ( !isset ($GLOBALS['errorArray']) ) {
>>>       $GLOBALS['errorArray'] = array ();
>>>     }
>>>
>>>     if ( is_array ($additionalErrorArray) ) {
>>>       $GLOBALS['errorArray'] += $additionalErrorArray;
>>>     }
>>>
>>>     return $GLOBALS['errorArray'];
>>>   }
>>> }
>>>
>>> Both of those functions work 100% for anything I've thrown at them. 
>>
>>
>> It works on mine as well.  How it works is a mystery to me, how is it 
>> working?
>>
>> Phil
>
>
> _______________________________________________
> talk mailing list
> talk at lists.nyphp.org
> http://lists.nyphp.org/mailman/listinfo/talk
>


-- 
Phil Powell
Web Developer
  ADNET Systems, Inc.
  11260 Roger Bacon Drive, Suite 403
  Reston, VA  20190-5203
Phone: (703) 709-7218 x107   Cell: (571) 437-4430   FAX: (703) 709-7219
EMail:  Phillip.Powell at adnet-sys.com      AOL IM: SOA Dude








More information about the talk mailing list