2009-10-06 22 views

Respuesta

2

Mi conjetura sería que en el momento capacidad orientado a objetos estaba siendo agregado a PHP, los diseñadores estaban mirando a Python.

+5

@Click Upvote Es interesante que haya seleccionado esta como la respuesta correcta. Ni siquiera responde técnicamente a su pregunta "¿Por qué debería usar la función __construct() en lugar de la función className() en PHP 5?" – Asaph

+1

De hecho, solo estaba siendo gracioso. La respuesta de Asaph es ciertamente mucho más útil. –

4

Porque php5 quería ser más como python.

niño yo, no es broma ...

Tener un método estándar para acciones estándar, como la construcción, es una solución razonable. Es la misma razón que en las clases C#, cuando extiende una clase, usa base para llamar a los constructores de la clase base en lugar de un objeto nombrado: simplifica el código y facilita el mantenimiento.

27

Los métodos/funciones __ magic parecen ser un tema constante en PHP (¡por una vez!). Una ventaja de usar __construct() sobre ClassName() como constructor es que si cambia el nombre de la clase, no necesita actualizar el constructor.

+2

¿'' __autoload() 'funciona independientemente de si usa' _construct() 'o' className() '? –

+1

Deseo que C++ y Java usen la firma del método ctor()/dtor(). : -/ –

+0

@Click Votación positiva Sí. __autoload() no debería importar qué estilo de constructor se usó. – Asaph

1

Al hacerlo siempre, puede invocar al constructor desde la clase super (base-) sin tener que saber su nombre. Esto es muy útil para el mantenimiento del árbol de clases, porque no desea tener que actualizar todas sus clases simplemente porque reorganiza sus árboles de clase

y ... simplemente adivinando ... si todas las clases nombran sus constructores de manera idéntica __construct(), en teoría, un constructor podría ser heredado de una superclase sin ninguna definición requerida. Esto tiene sentido en los árboles de clase donde hay clases abstractas intermedias, y en construcciones como en el objetivo C donde el comportamiento del constructor predeterminado se deriva completamente de los metadatos de la clase y por lo tanto (¡en principio!) No necesitaría codificación alguna.

0

Pregunta anterior, pero voy a morder ya que nadie ha respondido la pregunta real todavía.

function className() es un PHP4-style constructor.

función __construct() es un PHP5-style constructor.

Debe utilizar este último porque el primero está en desuso y puede eliminarse del idioma.

Además, el primero puede o no ignorar varios conceptos de OO de PHP5, como los operadores de visibilidad pública/privada. No es que quieras hacer el constructor privado si no estuvieras usando los patrones Singleton o Factory.

Cuestiones relacionadas