hay un proyecto que necesito extender. Todas las clases están en archivos separados, necesito extender algunas de las clases sin reescribir el código existente en otros archivos. Mi idea era usar espacios de nombres pero fallo. Aquí está un ejemplo:PHP Namespace e Include() con las clases
He cambió el nombre del archivo original clase A.php a A_Original.php:
class A
{
public function hello()
{
echo "hello world from Class A\n";
}
}
creó entonces un nuevo A.php:
namespace AOriginal {
include 'A_Original.php';
}
namespace {
class A
{
public function hello()
{
echo "hello world from Class A Extended\n";
}
}
}
Esto falla porque en including
el archivo A_Original.php original la clase se descarga al ámbito global (ignorando así el comando de espacio de nombres). No puedo modificar el código existente en el archivo A_Original.php, pero el cambio de nombre está bien.
Los otros archivos de proyecto (que no puedo modificar) usan un require "A.php"
.
¿Cómo lograr esto?
no funciona si la clase a_original.php se basa en otra clase
class A extends SomeOtherClass
porque ahora esta otra clase debe estar en el mismo espacio de nombres, que no está incluido ("someotherclass.php"), está en el ámbito global. aaargs. Estoy perdido. include() no debería cambiar el espacio de nombres actual, ¡pero sí! – cydo