¿Por qué debería usar function __construct()
en lugar de function className()
en PHP 5?¿Por qué PHP 5 usa __contruct() en lugar de className() como constructor?
Respuesta
Mi conjetura sería que en el momento capacidad orientado a objetos estaba siendo agregado a PHP, los diseñadores estaban mirando a Python.
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.
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.
¿'' __autoload() 'funciona independientemente de si usa' _construct() 'o' className() '? –
Deseo que C++ y Java usen la firma del método ctor()/dtor(). : -/ –
@Click Votación positiva Sí. __autoload() no debería importar qué estilo de constructor se usó. – Asaph
Debido a que se ha unificado con el método __destruct() y otros métodos especiales comenzando con dos subrayados por ejemplo __get, __sleep, __serialize http://us2.php.net/manual/en/language.oop5.magic.php
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.
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.
- 1. ¿Por qué se usa constructor en lugar de funciones?
- 2. use Classname() o __construct() como constructor en CodeIgniter?
- 3. ¿Por qué la clase Java Pattern usa un método de fábrica en lugar de un constructor?
- 4. Manifiesto de Android: ¿Por qué a veces ".<classname>" en lugar de solo "<classname>"?
- 5. ¿por qué usa el movl en lugar de push?
- 6. ¿Por qué la doctrina usa DONDE EN lugar de LÍMITE?
- 7. ¿Por qué usa Forth IF ENTONCES ... en lugar de ENDIF?
- 8. ¿Por qué OpenGL usa grados en lugar de radianes?
- 9. ¿Por qué RTP usa UDP en lugar de TCP?
- 10. ¿Por qué el cacao usa delegados en lugar de herencia?
- 11. ¿Por qué Ruby usa responder_a? en lugar de responde_ a?
- 12. ¿Por qué UnderscoreJS usa toString.call() en lugar de typeof?
- 13. ¿Por qué IPv6 usa dos puntos como delimitador en lugar de punto?
- 14. ¿Por qué se llama este constructor de copia en lugar de mover el constructor?
- 15. ¿Por qué se llama al constructor de copia en lugar del constructor de conversión?
- 16. ¿Por qué el constructor de IPAddress toma Int64 en lugar de UInt32?
- 17. WPF: ComboBox muestra "(namespace). (Classname)" en lugar de datos
- 18. ¿Por qué Git usa SHA-1 como números de versión?
- 19. PHP - ini_set ('session.gc_maxlifetime', 5) - ¿Por qué no termina la sesión?
- 20. ¿Por qué Java ArrayList usa conversión por elemento en lugar de conversión por matriz?
- 21. Por qué llamar explícitamente a un constructor en C++
- 22. ¿Cuándo y por qué usas @interface ClassName (Private)? - Objective-C
- 23. self :: vs className :: dentro de los métodos static className en PHP
- 24. ¿Cuál es la diferencia en :: ModuleName :: ClassName y ModuleName :: ClassName
- 25. ¿Por qué PHP no tiene un constructor predeterminado?
- 26. ¿Html.TextBox usa Request.Params en lugar de Model?
- 27. ¿Por qué se usa ConcurrentNavigableMap como una lista de omisiones?
- 28. ¿Por qué hay un constructor de valores además del constructor de tipos en Haskell?
- 29. ¿Qué rubí de concha usa como subshell?
- 30. ¿Por qué esta alerta 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
De hecho, solo estaba siendo gracioso. La respuesta de Asaph es ciertamente mucho más útil. –