Erweitern einer Klasse mit einem anderen Namespace mit demselben ClassName

Lesezeit: 1 Minute

Benutzer-Avatar
René Terstegen

Ich versuche Namespaces zu verwenden. Ich möchte eine Klasse in einem anderen Namespace erweitern. Der Name der Klasse ist derselbe. Beispiel:

Elternteil:

namespace Base;

class Section extends Skeleton {

protected $id;

protected $title;

protected $stylesheet;
}

Kind:

namespace Base2;
use \Base\Section;

class Section 
    extends \Base\Section {

}

Es ist eine Anwendung, die Doctrine 2 und Zend Framework verwendet. Die von Base/Section verwendete Skeleton-Klasse ist nur eine abstrakte Klasse, die die magischen Methoden (__get, _set usw.) enthält.

Wenn ich versuche, eine \Base2\Section-Klasse zu instanziieren, wird ein Fehler ausgegeben:

Fatal error: Cannot declare class Base2\Section because the name is 
already in use in /var/www/test/application/Models/Base2/Section.php 
on line 7

Irgendwelche Ideen?

  • Ist es nicht ein bisschen verwirrend, ein solches Namensschema zu haben?

    – Vladislav Rastrusny

    10. August 2010 um 13:56 Uhr

  • Ja, das ist es, aber es ist nicht das eigentliche Namensschema. Nur der Section-Teil ist real. Die Namensräume sind nur zufällig.

    – René Terstegen

    11. August 2010 um 6:53 Uhr

  • @Rene: Bist du sicher, dass sie es nicht sind? willkürlich?

    – Leichtigkeitsrennen im Orbit

    6. Juli 2011 um 8:50 Uhr

Verwenden Sie einfach den vollständig qualifizierten Namen

namespace Base2;

class Section 
    extends \Base\Section {
}

Oder Aliasing

namespace Base2;
use \Base\Section as BSection;

class Section 
    extends BSection {
}

wenn du sagst

use \Base\Section

Sie ziehen die Section-Klasse in Ihren aktuellen Gültigkeitsbereich und verursachen einen Konflikt, wenn Sie eine neue Klasse namens Section erstellen möchten. lass einfach die use-Anweisung weg.

  • Richtig, Klassenname mit Name kann verwirrend sein. Jedes Mal, wenn ich diese Art von Code sehe, muss ich ein bisschen darüber nachdenken.

    – mahfuz

    29. Januar 2019 um 11:48 Uhr

1176760cookie-checkErweitern einer Klasse mit einem anderen Namespace mit demselben ClassName

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy