c'è un progetto che ho bisogno di estendere. Tutte le classi sono in file separati, ho bisogno di estendere alcune delle classi senza riscrivere il codice esistente in altri file. La mia idea era di usare gli spazi dei nomi ma non ci riesco. Ecco un esempio:Namespace PHP e Include() con classi
ho rinominato il file classe originale A.php a A_Original.php:
class A
{
public function hello()
{
echo "hello world from Class A\n";
}
}
poi creato un nuovo A.php:
namespace AOriginal {
include 'A_Original.php';
}
namespace {
class A
{
public function hello()
{
echo "hello world from Class A Extended\n";
}
}
}
Ciò non riesce perché su including
il file A_Original.php originale la classe viene scaricata sull'ambito globale (ignorando quindi il comando namespace). Non riesco a modificare il codice esistente nel file A_Original.php, ma la ridenominazione è ok.
Gli altri file di progetto (che non è possibile modificare) utilizzano uno require "A.php"
.
Come realizzare questo?
non funziona se la classe a_original.php è basata su un'altra classe
class A extends SomeOtherClass
perché ora questa altra classe dovrebbe essere nello stesso spazio dei nomi, che non è incluso ("someotherclass.php") - è nell'ambito globale. aaargs. Mi sono perso. include() non dovrebbe cambiare lo spazio dei nomi corrente - ma lo fa! – cydo