Расширение класса с другим пространством имен с тем же ClassName - PullRequest
24 голосов
/ 10 августа 2010

Я пытаюсь использовать пространства имен. Я хочу расширить класс в другом пространстве имен. Название класса такое же. Пример:

Родитель:

namespace Base;

class Section extends Skeleton {

protected $id;

protected $title;

protected $stylesheet;
}

Ребенок:

namespace Base2;
use \Base\Section;

class Section 
    extends \Base\Section {

}

Это приложение, которое использует Doctrine 2 и Zend Framework. Класс Skeleton, используемый Base / Section, является просто абстрактным классом, который содержит магические методы (__get, _set и т. Д.).

Когда я пытаюсь создать экземпляр класса \ Base2 \ Section, он выдает ошибку:

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

Есть идеи?

Ответы [ 2 ]

43 голосов
/ 10 августа 2010

Просто используйте полное имя

namespace Base2;

class Section 
    extends \Base\Section {
}

Или псевдоним

namespace Base2;
use \Base\Section as BSection;

class Section 
    extends BSection {
}
11 голосов
/ 10 августа 2010

когда вы говорите

use \Base\Section

вы перетаскиваете класс Section в вашу текущую область, вызывая конфликт, когда вы хотите создать новый класс с именем Section. просто опустите оператор использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...