When creating a new object in PHP, I get the following error message:
Fatal error: Call to private MyObject::__construct() from invalid context
I just create the new object and do not try to call the constructor explicitly. Does anyone know what's going on?
views:
264answers:
1
+3
A:
Your MyObject class has a protected or private constructor, which means that the class cannot be instantiated. __construct() functions are always called when an object is instantiated, so trying to do something like $x = new MyObject() will cause a fatal error with a private construction function. (If you do not specifically declare a __construct() function, the parent constructor will be called).
Private constructors are often used in Singleton classes to prevent direct instantiation of an object. If it's not a class that you built, it might have a getInstance() function available (or something similar) to return an instance of itself.
zombat
2010-01-04 06:04:20
That worked, I think I've seen people declaring private constructors before. Is there any reason to do this?
Brian
2010-01-04 06:15:39
The only reason to do it is if you don't wish the class to be instantiated for some reason. As I mentioned in the answer, the Singleton pattern is a popular reason you might do this (http://en.wikipedia.org/wiki/Singleton_pattern).
zombat
2010-01-04 06:17:55
Private constructors are often used by PHP implementations of the Singleton pattern, and are sometimes used with Factories. For example, a factory static method of the class can search for locally cached instances of objects and return a reference instead of a new object. Making the constructor private will prevent any accidental bypasses of the factory method.
Charles
2010-01-04 06:19:50