как избежать невозможности повторного объявления класса для 2 разных классов с одинаковым именем

Я пытаюсь включить некоторые функции с доски phpBB в свое приложение, например, один логин. Но если я включаю common.php, он говорит: «Невозможно повторно объявить пользователя класса», потому что в моем приложении уже есть пользователь класса. Есть ли способ избежать этого? Я немного пробовал с пространствами имен, но так и не работал с ними.

Поэтому мне нужен способ включить 2 класса с одинаковым именем.


person fehrlich    schedule 06.10.2010    source источник


Ответы (3)


Пространства имен — единственный способ.

person Bart van Heukelom    schedule 06.10.2010
comment
Можете ли вы подтолкнуть меня в правильном направлении, как работать с этими пространствами имен для решения этой проблемы? - person fehrlich; 06.10.2010
comment
вам нужен PHP 5.3 для поддержки пространства имен. Как правило, если вы используете его, вам придется внести много изменений в код — пространства имен должны быть определены везде. Проще просто переименовать свой класс, скажем, в «myuser». - person Silver Light; 06.10.2010
comment
@Silver Light: вам не нужно везде использовать пространства имен. Вам просто нужно поместить один пользовательский класс в пространство имен и обновить ссылки на этот класс в файлах, где он используется. Остальное можете оставить себе. Тем не менее, переименование класса, вероятно, является более простым решением. - person Bart van Heukelom; 06.10.2010
comment
ну, переименование моих классов было бы головной болью :-/, потому что я использую много динамических вызовов, с которыми моя IDE не может справиться при рефакторинге. Я продолжу поиск решения на некоторое время. - person fehrlich; 06.10.2010
comment
@ Барт ван Хеукелом, вот что я имел в виду, просто не могу прояснить свои мысли :) - person Silver Light; 06.10.2010
comment
@XzenTorXz: я думаю, что поиск будет пустой тратой времени, поскольку нет способа переименовать класс так или иначе (добавление пространства имен также является переименованием при использовании динамических вызовов) - person Bart van Heukelom; 06.10.2010

Как упоминалось в других ответах на этот вопрос, нет способа обойти это без переименования вашего класса или прохождения суеты с работой пространств имен (например, обеспечение правильной версии PHP).

Хорошей общей привычкой является пространство имен ваших классов по привычке. Если вы посмотрите, например, на пакеты Zend, вы увидите, что каждое имя класса имеет префикс Zend_, например. Zend_Mail, Zend_Mime, Zend_Mime_Part. Это означает, что (а) существует логическая связь между классами, имеющими связанные функции, и (б) маловероятно, что классы будут конфликтовать с созданными вами или другой структурой. Этому шаблону следуют другие проекты, такие как PEAR.

Это требование устарело с появлением PHP 5.3. Однако версия 5.3 еще не получила широкого распространения, особенно среди провайдеров виртуального хостинга, и это решение вполне может подойти для вашей текущей ситуации.

person lonesomeday    schedule 06.10.2010

Просто переименуйте свой класс. не так уж и важно

person Your Common Sense    schedule 06.10.2010