Подключении 2 классов с одним именем
-
- Сообщения: 52
- Зарегистрирован: 2015.08.07, 18:12
Подключении 2 классов с одним именем
Добрый день!
Предположим есть класс User лежит он в папке 1. И есть еще один класс User лежит он в папке 2. Namespace одинаковый или нету. Возможно ли как то одновременно использовать эти классы не редактирую их?
Или нужно одному из них прописать Namespace и потом подключать?
Предположим есть класс User лежит он в папке 1. И есть еще один класс User лежит он в папке 2. Namespace одинаковый или нету. Возможно ли как то одновременно использовать эти классы не редактирую их?
Или нужно одному из них прописать Namespace и потом подключать?
-
- Сообщения: 680
- Зарегистрирован: 2017.06.21, 13:50
Re: Подключении 2 классов с одним именем
Да возможно, можешь через trait подключить, если методы одинаковые, то переименовать через trait.
-
- Сообщения: 680
- Зарегистрирован: 2017.06.21, 13:50
Re: Подключении 2 классов с одним именем
Можешь как обычно в yii подключить, если что то такое то используй trait.
Re: Подключении 2 классов с одним именем
нельзя. имя класса должно отличаться. неймспейс - часть имени класса.Aleksey_ZX писал(а): ↑2017.10.25, 19:04 Добрый день!
Предположим есть класс User лежит он в папке 1. И есть еще один класс User лежит он в папке 2. Namespace одинаковый или нету. Возможно ли как то одновременно использовать эти классы не редактирую их?
Или нужно одному из них прописать Namespace и потом подключать?
-
- Сообщения: 52
- Зарегистрирован: 2015.08.07, 18:12
Re: Подключении 2 классов с одним именем
ВЫ задачу не поняли. Мне не нужно множественное наследование. Я хочу избежать ошибки, при подключении второго класса.trueorfalse писал(а): ↑2017.10.25, 19:07 Да возможно, можешь через trait подключить, если методы одинаковые, то переименовать через trait.
-
- Сообщения: 52
- Зарегистрирован: 2015.08.07, 18:12
Re: Подключении 2 классов с одним именем
Я так и думал.zelenin писал(а): ↑2017.10.25, 19:38нельзя. имя класса должно отличаться. неймспейс - часть имени класса.Aleksey_ZX писал(а): ↑2017.10.25, 19:04 Добрый день!
Предположим есть класс User лежит он в папке 1. И есть еще один класс User лежит он в папке 2. Namespace одинаковый или нету. Возможно ли как то одновременно использовать эти классы не редактирую их?
Или нужно одному из них прописать Namespace и потом подключать?
Казалось бы очевидная вещь, но нигде не написано явно.
-
- Сообщения: 680
- Зарегистрирован: 2017.06.21, 13:50
Re: Подключении 2 классов с одним именем
Поменяй название класса?Aleksey_ZX писал(а): ↑2017.10.25, 20:37ВЫ задачу не поняли. Мне не нужно множественное наследование. Я хочу избежать ошибки, при подключении второго класса.trueorfalse писал(а): ↑2017.10.25, 19:07 Да возможно, можешь через trait подключить, если методы одинаковые, то переименовать через trait.
Re: Подключении 2 классов с одним именем
ну это действительно очевидно и не нуждается в уточнении. Невозможно определить какой конкретный класс вы хотите вызвать, если подключены оба.
-
- Сообщения: 52
- Зарегистрирован: 2015.08.07, 18:12
Re: Подключении 2 классов с одним именем
Все зависит от области видимости. Если бы у класса была локальная область видимости, то при инклюде он был виден в приделах неймспаса или функции. А так при подключении файла PHP помещает его в глобальную область видимости. Причем нет механизма задать\переназанчить наймспайс пи импорте. .
В JS область видимости локальная, и объект заданный внутри другого объекта не виден за приделами верхнего объекта.
-
- Сообщения: 52
- Зарегистрирован: 2015.08.07, 18:12
Re: Подключении 2 классов с одним именем
По рукам нужно бить за такое.trueorfalse писал(а): ↑2017.10.25, 20:41Поменяй название класса?Aleksey_ZX писал(а): ↑2017.10.25, 20:37ВЫ задачу не поняли. Мне не нужно множественное наследование. Я хочу избежать ошибки, при подключении второго класса.trueorfalse писал(а): ↑2017.10.25, 19:07 Да возможно, можешь через trait подключить, если методы одинаковые, то переименовать через trait.
Замена имени класса плохая идея.
Нужно дописать наймспайс. хотя это тоже не очень хорошо. Если класс писал не ты.
А вообще есть спецификация psr-4. Если ее соблюдать то и не появятся такие вопросы.
Re: Подключении 2 классов с одним именем
нормальная.
проект ваш? классы тоже ваши. неймспейс - часть имени класса.Aleksey_ZX писал(а): ↑2017.10.25, 21:34Нужно дописать наймспайс. хотя это тоже не очень хорошо. Если класс писал не ты.
однако вопрос у вас возник.Aleksey_ZX писал(а): ↑2017.10.25, 21:34А вообще есть спецификация psr-4. Если ее соблюдать то и не появятся такие вопросы.
-
- Сообщения: 52
- Зарегистрирован: 2015.08.07, 18:12
Re: Подключении 2 классов с одним именем
Берем такую ситуацию: У вас старый проект, в нем есть класс A и класс B. Эти классы имеет много связей в проекте. Вам нужно дописать функционал. Этот функционал есть в новой версии класса А и B. Версии класса A не совместимы. в классе B появился новый метод.zelenin писал(а): ↑2017.10.25, 22:22нормальная.
проект ваш? классы тоже ваши. неймспейс - часть имени класса.Aleksey_ZX писал(а): ↑2017.10.25, 21:34Нужно дописать наймспайс. хотя это тоже не очень хорошо. Если класс писал не ты.
однако вопрос у вас возник.Aleksey_ZX писал(а): ↑2017.10.25, 21:34А вообще есть спецификация psr-4. Если ее соблюдать то и не появятся такие вопросы.
И получается, что вам нужно менять название класса, или добавлять наймспас в чужом классе(библиотеке).
Причем для класса B получится дублирование.
Что совсем не хорошо.
Вот и возникает вопрос как это все так написать и назвать, что бы потом не было проблем.
Re: Подключении 2 классов с одним именем
в этом проекте что, не используется композер или какой-либо автозагручик? в этом проекте классы подключаются так: require 'ClassName.php'; $a = new ClassName; ? только в последнем случае было бы возможно существование двух одиоименных классов.
Re: Подключении 2 классов с одним именем
Если в чужой библиотеке с GitHub, то форкаем и добавляем неймспейсы, переключаемся на форк и отправляем автору Pull Request.
Если A1 и A2 несовместимы, то и незачем их называть одинаково. Переименуйте A2 и ипользуйте оба.Aleksey_ZX писал(а): ↑2017.10.26, 09:21 Версии класса A не совместимы. в классе B появился новый метод.
Если же совместимы, то просто настройте автозагрузку через classmap, чтобы везде вместо оригинала подгружался ваш класс.