Hoy, la respuesta aceptada es obsoleta.
Renombrar clases es una mala práctica: debe recordar qué y dónde cambiar el nombre cada vez que actualice a una versión más nueva. Algunas veces (como usar Reflection o una estructura de dependencia compleja) puede ser imposible sin una refactorización radical. Y esto es accidental complexity que desea evitar. Es por eso que namespaces se introdujeron en PHP. Java, C++ o C# no usan __construct
, usan el constructor con nombre y no hay problema con ellos.
A partir de PHP 5.3.3, métodos con el mismo nombre que el último elemento de un nombre de clase espacio de nombres ya no serán tratados como constructor. Este cambio no afecta a las clases no espaciadas.
Ejemplo
namespace Foo;
class Test {
var $a = 3;
function Test($a) {
$this->a = $a;
}
function getA() {
return $this->a;
}
}
$test = new Test(4);
echo $test->getA(); // 3, Test is not a constructor, just ordinary function
Tenga en cuenta que el nombre constructores no están en desuso (PHP 5.5 en la actualidad). Sin embargo, no puede predecir que su clase no se utilizará en el espacio de nombres, , por lo tanto, se debe preferir__construct
.
Aclaración de la mala práctica se mencionó anteriormente (Dennis)
En algún lugar de su código se puede utilizar ReflectionClass::getName(); cuando cambie el nombre de la clase, debe recordar dónde utilizó Reflection y comprobar si el resultado de getName()
sigue siendo coherente en su aplicación. Cuanto más necesite recordar algo específico, más probabilidades hay de que se olvide algo que da como resultado errores en la aplicación.
Los padres no pueden tener control sobre todas las clases del mundo que dependen de ellas. Si allow_url_include está habilitado, algún otro sitio web podría estar usando la clase de su servidor, que puede bloquearse si cambia el nombre de alguna clase. Es aún peor en los lenguajes compilados mencionados anteriormente: la biblioteca puede copiarse y agruparse en otro código.
No hay ninguna razón por la que para cambiar el nombre de clase:
- si los conflictos de nombre de la clase, el uso de espacios de nombres
- si los cambios de responsabilidad clase, derivar alguna otra clase en lugar
En las clases PHP en el espacio de nombres, el método con el mismo nombre debe evitarse de todos modos: intuitivamente debe producir un objeto creado la clase; si hace algo más, ¿por qué darle el mismo nombre? Debería ser un constructor y nada más. El problema principal es que el comportamiento de dicho método depende del uso del espacio de nombres.
No hay ningún problema con los constructores de construcciones __ en PHP. Pero no fue la idea más inteligente alterar los constructores nombrados.
El estilo del constructor PHP 4.x quedará obsoleto en PHP 7.0 y se eliminará en la siguiente versión principal. http://php.net/manual/de/migration70.deprecated.php#migration70.deprecated.php4-constructors – SimonSimCity