Web lists-archives.com

Re: singleton in php?




unsubscribe

On September 5, 2018 at 2:56 AM Pete Ford <pete@xxxxxxxxxxxxx> wrote:


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