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/singletonSo, 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