2010-01-04 16 views

Respuesta

20

Su clase MyObject tiene un constructor privado o protegido, lo que significa que no se puede crear una instancia de la clase. Las funciones __construct() siempre se invocan cuando se crea una instancia de un objeto, por lo que intentar hacer algo como $x = new MyObject() causará un error fatal con una función de construcción privada. (Si no declaras específicamente una función __construct(), se llamará al constructor padre).

Los constructores privados a menudo se usan en clases Singleton para evitar la creación de instancias directas de un objeto. Si no es una clase que ha creado, puede tener una función getInstance() disponible (o algo similar) para devolver una instancia de sí mismo.

+0

Eso funcionó, creo que he visto personas declarando constructores privados antes. ¿Hay alguna razón para hacer esto? – Brian

+1

La única razón para hacerlo es si no desea que la clase sea instanciada por algún motivo. Como mencioné en la respuesta, el patrón Singleton es una razón popular por la que podría hacer esto (http://en.wikipedia.org/wiki/Singleton_pattern). – zombat

+1

Los constructores privados a menudo son utilizados por implementaciones PHP del patrón Singleton, y algunas veces se usan con Factories. Por ejemplo, un método estático de fábrica de la clase puede buscar instancias de objetos en caché localmente y devolver una referencia en lugar de un nuevo objeto. Hacer el constructor privado evitará cualquier bypass accidental del método de fábrica. – Charles

0

En lugar de $x = new MyObject() podría utilizar

$x = MyObject::getInstance(); 

suponiendo que MyObject es una función Singleton y getInstance() está disponible.

2

Para mí fue la de que el nombre de la CLASE era el mismo nombre que uno de los método s que era privado ...

por ejemplo ...

class myClass { 

    public function __construct() { 

    } 

    private function myClass() { 

    } 
} 
Cuestiones relacionadas