[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