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