Web lists-archives.com

Re: singleton in php?




On 02/09/18 21:15, Jeffry Killen wrote:
Hello;

I have been trying to get a better understanding of "singleton".

It is defined as a class that can only produce one instance of
itself.

In the online explanation, that is accomplished by a
private constructor function that produces an instance
of the class within its instance.

But in php I am of the understanding that a constructor
function has to be made public and can't return anything.

Here is the online reference I am looking at:
https://www.techopedia.com/definition/15830/singleton

So, at some point it seems that the class instance has to
be exported via a return statement at some point, otherwise
how would it be used in other code?

Is there a part of the manual that addresses this?

I have a hard copy text* on PHP that addresses the singleton
and factory pattern, but I have not been able to completely
comprehend either of these.

*I don't have immediate access to the book and don't remember
the title, but  the publisher is Friends of Ed / (Apress).

I have been further thrown off by the use of singleton
to refer to an object literal in javascript.

I realize that this in not about javascript but the concept
and this use of the term has me confused.

More than one object literal can be created and subsequently
cloned by code, so how is it a singleton, in the general sense?

Thank you for time and attention.

JK

Not sure where you got the "constructor function has to be made public" from: constructors can be private or protected in PHP just like most other OO languages. You then hold a static instance of the singleton class, and access it or create it with a static method.

So your basic code is something like:

   class MySingleton

   {

        private static $MY_INSTANCE = NULL;

        private function __construct($params)

        {

            /* Do stuff */

        }

        public static function getInstance($params)

        {

            if (self::$MY_INSTANCE===NULL)

            {

                self::$MY_INSTANCE = new MySingleton($params);

            }

            return self::$MY_INSTANCE;

        }

I think that should work - anyone else got any corrections?

Cheers

Pete