Подключении 2 классов с одним именем

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
Aleksey_ZX
Сообщения: 52
Зарегистрирован: 2015.08.07, 18:12

Подключении 2 классов с одним именем

Сообщение Aleksey_ZX »

Добрый день!
Предположим есть класс User лежит он в папке 1. И есть еще один класс User лежит он в папке 2. Namespace одинаковый или нету. Возможно ли как то одновременно использовать эти классы не редактирую их?
Или нужно одному из них прописать Namespace и потом подключать?
trueorfalse
Сообщения: 680
Зарегистрирован: 2017.06.21, 13:50

Re: Подключении 2 классов с одним именем

Сообщение trueorfalse »

Да возможно, можешь через trait подключить, если методы одинаковые, то переименовать через trait.
trueorfalse
Сообщения: 680
Зарегистрирован: 2017.06.21, 13:50

Re: Подключении 2 классов с одним именем

Сообщение trueorfalse »

Можешь как обычно в yii подключить, если что то такое то используй trait.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Подключении 2 классов с одним именем

Сообщение zelenin »

Aleksey_ZX писал(а): 2017.10.25, 19:04 Добрый день!
Предположим есть класс User лежит он в папке 1. И есть еще один класс User лежит он в папке 2. Namespace одинаковый или нету. Возможно ли как то одновременно использовать эти классы не редактирую их?
Или нужно одному из них прописать Namespace и потом подключать?
нельзя. имя класса должно отличаться. неймспейс - часть имени класса.
Aleksey_ZX
Сообщения: 52
Зарегистрирован: 2015.08.07, 18:12

Re: Подключении 2 классов с одним именем

Сообщение Aleksey_ZX »

trueorfalse писал(а): 2017.10.25, 19:07 Да возможно, можешь через trait подключить, если методы одинаковые, то переименовать через trait.
ВЫ задачу не поняли. Мне не нужно множественное наследование. Я хочу избежать ошибки, при подключении второго класса.
Aleksey_ZX
Сообщения: 52
Зарегистрирован: 2015.08.07, 18:12

Re: Подключении 2 классов с одним именем

Сообщение Aleksey_ZX »

zelenin писал(а): 2017.10.25, 19:38
Aleksey_ZX писал(а): 2017.10.25, 19:04 Добрый день!
Предположим есть класс User лежит он в папке 1. И есть еще один класс User лежит он в папке 2. Namespace одинаковый или нету. Возможно ли как то одновременно использовать эти классы не редактирую их?
Или нужно одному из них прописать Namespace и потом подключать?
нельзя. имя класса должно отличаться. неймспейс - часть имени класса.
Я так и думал.
Казалось бы очевидная вещь, но нигде не написано явно.
trueorfalse
Сообщения: 680
Зарегистрирован: 2017.06.21, 13:50

Re: Подключении 2 классов с одним именем

Сообщение trueorfalse »

Aleksey_ZX писал(а): 2017.10.25, 20:37
trueorfalse писал(а): 2017.10.25, 19:07 Да возможно, можешь через trait подключить, если методы одинаковые, то переименовать через trait.
ВЫ задачу не поняли. Мне не нужно множественное наследование. Я хочу избежать ошибки, при подключении второго класса.
Поменяй название класса?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Подключении 2 классов с одним именем

Сообщение zelenin »

Aleksey_ZX писал(а): 2017.10.25, 20:41Казалось бы очевидная вещь, но нигде не написано явно.
ну это действительно очевидно и не нуждается в уточнении. Невозможно определить какой конкретный класс вы хотите вызвать, если подключены оба.
Aleksey_ZX
Сообщения: 52
Зарегистрирован: 2015.08.07, 18:12

Re: Подключении 2 классов с одним именем

Сообщение Aleksey_ZX »

zelenin писал(а): 2017.10.25, 20:44
Aleksey_ZX писал(а): 2017.10.25, 20:41Казалось бы очевидная вещь, но нигде не написано явно.
ну это действительно очевидно и не нуждается в уточнении. Невозможно определить какой конкретный класс вы хотите вызвать, если подключены оба.
Все зависит от области видимости. Если бы у класса была локальная область видимости, то при инклюде он был виден в приделах неймспаса или функции. А так при подключении файла PHP помещает его в глобальную область видимости. Причем нет механизма задать\переназанчить наймспайс пи импорте. :(.

В JS область видимости локальная, и объект заданный внутри другого объекта не виден за приделами верхнего объекта.
Aleksey_ZX
Сообщения: 52
Зарегистрирован: 2015.08.07, 18:12

Re: Подключении 2 классов с одним именем

Сообщение Aleksey_ZX »

trueorfalse писал(а): 2017.10.25, 20:41
Aleksey_ZX писал(а): 2017.10.25, 20:37
trueorfalse писал(а): 2017.10.25, 19:07 Да возможно, можешь через trait подключить, если методы одинаковые, то переименовать через trait.
ВЫ задачу не поняли. Мне не нужно множественное наследование. Я хочу избежать ошибки, при подключении второго класса.
Поменяй название класса?
По рукам нужно бить за такое.
Замена имени класса плохая идея.

Нужно дописать наймспайс. хотя это тоже не очень хорошо. Если класс писал не ты.
А вообще есть спецификация psr-4. Если ее соблюдать то и не появятся такие вопросы.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Подключении 2 классов с одним именем

Сообщение zelenin »

Aleksey_ZX писал(а): 2017.10.25, 21:34 Замена имени класса плохая идея.
нормальная.
Aleksey_ZX писал(а): 2017.10.25, 21:34Нужно дописать наймспайс. хотя это тоже не очень хорошо. Если класс писал не ты.
проект ваш? классы тоже ваши. неймспейс - часть имени класса.
Aleksey_ZX писал(а): 2017.10.25, 21:34А вообще есть спецификация psr-4. Если ее соблюдать то и не появятся такие вопросы.
однако вопрос у вас возник.
Aleksey_ZX
Сообщения: 52
Зарегистрирован: 2015.08.07, 18:12

Re: Подключении 2 классов с одним именем

Сообщение Aleksey_ZX »

zelenin писал(а): 2017.10.25, 22:22
Aleksey_ZX писал(а): 2017.10.25, 21:34 Замена имени класса плохая идея.
нормальная.
Aleksey_ZX писал(а): 2017.10.25, 21:34Нужно дописать наймспайс. хотя это тоже не очень хорошо. Если класс писал не ты.
проект ваш? классы тоже ваши. неймспейс - часть имени класса.
Aleksey_ZX писал(а): 2017.10.25, 21:34А вообще есть спецификация psr-4. Если ее соблюдать то и не появятся такие вопросы.
однако вопрос у вас возник.
Берем такую ситуацию: У вас старый проект, в нем есть класс A и класс B. Эти классы имеет много связей в проекте. Вам нужно дописать функционал. Этот функционал есть в новой версии класса А и B. Версии класса A не совместимы. в классе B появился новый метод.

И получается, что вам нужно менять название класса, или добавлять наймспас в чужом классе(библиотеке).
Причем для класса B получится дублирование.
Что совсем не хорошо.

Вот и возникает вопрос как это все так написать и назвать, что бы потом не было проблем.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Подключении 2 классов с одним именем

Сообщение zelenin »

в этом проекте что, не используется композер или какой-либо автозагручик? в этом проекте классы подключаются так: require 'ClassName.php'; $a = new ClassName; ? только в последнем случае было бы возможно существование двух одиоименных классов.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Подключении 2 классов с одним именем

Сообщение ElisDN »

Aleksey_ZX писал(а): 2017.10.26, 09:21 или добавлять наймспас в чужом классе (библиотеке).
Если в чужой библиотеке с GitHub, то форкаем и добавляем неймспейсы, переключаемся на форк и отправляем автору Pull Request.
Aleksey_ZX писал(а): 2017.10.26, 09:21 Версии класса A не совместимы. в классе B появился новый метод.
Если A1 и A2 несовместимы, то и незачем их называть одинаково. Переименуйте A2 и ипользуйте оба.

Если же совместимы, то просто настройте автозагрузку через classmap, чтобы везде вместо оригинала подгружался ваш класс.
Ответить