Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> namespace 
:(
    Опции темы
Sanchezzz
Дата 27.8.2013, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Подскажите с пару вопросами. 

Есть собственный двиг сейчас с переводом проекта на namespace возник вопрос.
Cтоит делать для приложений отлетное namespace от двига? 

Целью использования namespace послужили след мотивации с моей стороны.
1) это сократить проверки в autoload  к минимум использовать имя пространства как путь.
2) разделить двиг на отдельное пространство да бы дать возможность использовать те имена классов которые захочется
3) Подключать компоненты симфонии - ZD2 итд... 
4) Пара двигаться дальше использовать все плюшки и пряники 5.4+

Это сообщение отредактировал(а) Sanchezzz - 27.8.2013, 23:46


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Gold Dragon
Дата 28.8.2013, 07:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



честно, 4 раза пытался начать это использовать. Но имея движок в тысячи файлов, так и не смог себя убедить что это нужно или актуально smile

А вот в очередной раз возвращаться к этому заставляет меня только это утверждение
Цитата(Sanchezzz @  28.8.2013,  00:42 Найти цитируемый пост)
4) Пара двигаться дальше использовать все плюшки и пряники 5.4+



PS
может в очередной раз меня переубедят ;)



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Sanchezzz
Дата 28.8.2013, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Gold Dragon, я также как и вы брался по несколько раз за это дело  (3) и с каждым разом как г... в прорубе метался туда обратно, у меня хоть и не 1к файлов но за ночь перевел проект, пока в рабочем состояние. 

Вся соль это использовать namespace как путь в autoload

Код

    $is_namespaced = ($pos = strripos($class, '\\')) !== false; 
    
    $class = ltrim($class, '\\');
    $class = str_replace(array('/', '\\',), DIRECTORY_SEPARATOR , $class);
    // Проверяем namespace на путь...
    if($is_namespaced){
        $path = dirname(__FILE__) . DIRECTORY_SEPARATOR . ".." .  DIRECTORY_SEPARATOR . ".." .  DIRECTORY_SEPARATOR . $class . ".php";
        if(is_file($path)){
            include_once $path;
            return class_exists($class,false);
        }
    }


Это сообщение отредактировал(а) Sanchezzz - 28.8.2013, 08:59


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
ksnk
Дата 28.8.2013, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(Sanchezzz @  28.8.2013,  08:58 Найти цитируемый пост)
Вся соль это использовать namespace как путь в autoload

Решение, imho, нужное. Оно удобно и разумно, если речь идет о разработке плагина в определенную систему. Бросаем класс в каталог в "пути поиска" файлов проекта и имеем простоту смены версии плагина. 
Опять же, "автоматически", получается непересекающиеся в проекте имена классов. Имя плагина уже входит префиксом-неймспейсом в имя класса.

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


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Sanchezzz
Дата 28.8.2013, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



ksnk,  Да всегда есть трабы, когда нужно внедрить в старый проект, что-то с нового, особенно если процесс эволюции кода проекта ушел далеко вперед. 

Gold Dragon,  Наверняка есть такие места где можно не указывать namespace 
у меня такие места появились, это непосредственно созданные контроллеры и модули, единственное extends нужно прописывать с namespace ну и use какие классы нужно импортировать. 



--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Gold Dragon
Дата 28.8.2013, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Цитата(Sanchezzz @  28.8.2013,  10:50 Найти цитируемый пост)
Gold Dragon,  Наверняка есть такие места где можно не указывать namespace 
скорее наоборот smile 

Так что пока никак не могу себе придумать актуальность.. Что касается autoload, ну может ты и прав, надо поразмыслить... Просто пока не могу осознать это применительно к своим проектам.

PS
а какой смысл вообще использовать  DIRECTORY_SEPARATOR? Юниктовые системы используют / а винде вообще пофиг. Просто ставить слеш и не мудрить?



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Sanchezzz
Дата 28.8.2013, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Цитата

а какой смысл вообще использовать  DIRECTORY_SEPARATOR?

Если винда или *nix-оси то смысла нету, особенно для винды все ровно какой  путь и какой регистр имен файлов.

DIRECTORY_SEPARATOR зависит от платформы и php как кросплатформенный язык обязан иметь такую константу) 

В общем хочешь используй, хочешь не используй.


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Gold Dragon
Дата 28.8.2013, 20:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Цитата(Sanchezzz @  28.8.2013,  21:40 Найти цитируемый пост)
В общем хочешь используй, хочешь не используй. 
перестал использовать, писать много да и строчки длинные  smile 

А что касается автозагрузки классов, то я использую в некоторых случаях простой INI-файл с настройками по типу 
Код

; [группа класса]
;     название файла = 'имя класса'
;=======================================

;---------------------------------------
; Ядро
;---------------------------------------
[core]

; Основное ядро
gdlotos = 'GDLotos'

; Конфигурация
config = 'GDLConfig'

; Управление пользователями
user = 'GDLUser'

; Управление базой данных
database = 'GDLDatabase'

; Управление сессиями
session = 'GDLSession'

; Управление шаблонами
template = 'GDLTemplate'

; Управление кэшем
cache = 'GDLCache'

; Управление ошибками
exception = 'GDLException'

;---------------------------------------
; Библиотеки
;---------------------------------------
[library]

; Работа с INI-файлами
ini = 'LibIni'

; Работа с языковыми файлами
lang = 'LibLang'


Так что мне кажется снова появился смысл использовать NAMESPACE smile только нужен реально работающий код примера ну и понятный 


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Arantir
Дата 28.8.2013, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 16
Всего: 55



После прочтения темы уже не могу четко сформулировать какие-то аргументы в пользу неймспейсов. Некоторых, видимо, вполне удовлетворяет и их отсутствие, без особого дискомфорта.

Добавлю тогда просто личный пример. 
Проектик на ранней стадии разработки. Все сделано на неймспейсах. Более 50 классов и более 30 директорий (с учетом вложенных). Используется namespace-based класс-лодер. При всем этом в конфигах прописаны только 5 корневых ("основополагающих") неймспейсов (что-то вроде: контролеры, модели, плагины, сервисы, пользовательские классы). Все классы расположены по путям, соответствующих их неймспейсам и подгружаются, фактически, автоматически, исходя из директорий корневого неймспейса. Любой интересующий разработчика класс находится моментально.
В целом напоминает структуру в Java. Правда, в отличие от нее, в файл можно запихнуть больше одного класса =)

Но лично мне это нравится больше за частую неразбериху в классах. При использовании нейспейсов разработчик косвенно обязуется создать валидный путь к файлу, соответствующий неймспейсу, и назвать файл именем класса.
А то уже был у меня случай, когда в файле типа "класс.php" встретил "Класс_С_Очень_Замутным_Названием"

Namespace. Снижает уровень екстрасенсинга более, чем на 50%! smile 



--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Sanchezzz
Дата 28.8.2013, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



"Класс_С_Очень_Замутным_Названием"  ага напоминает стиль ZEND без namespace пример Zend_Search_Lucene_Search_Weight_Boolean где полный путь до файла Zend/Search/Lucene/Search/Weight/Boolean/Zend_Search_Lucene_Search_Weight_Boolean.php

Не не лучше namespace и четко ретуал соблюдать.

Я стараюсь больше 2-3 суб namespace нечего не строить принцип Yii2
Код

namespace Yii\base;
use Yii;
class Controller extends Component { // так как Component из NS Yii\base NP указывать не нужно.

}

Просто не нужно мудрить с большим количеством папок достаточно 2-3;


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
ksnk
Дата 29.8.2013, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(Arantir @  28.8.2013,  21:18 Найти цитируемый пост)
Любой интересующий разработчика класс находится моментально.
Цитата(Arantir @  28.8.2013,  21:18 Найти цитируемый пост)
Namespace. Снижает уровень екстрасенсинга более, чем на 50%!  

А нормальный IDE (phpStorm) не устраняет надобность в квалифицированном экстрасенсе? Он и сам сообразит в каком файле какой класс.

Этот явовский принцип "один класс - один файл", применительно к php меня раздражает. Понятно, что для Java это не влияет на эффективность, компилятор скомпилирует, а для php раскидать проект еще в  пару десятков файлов - может сказаться на скорости выполнения, если акселераторы не вкручивать.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Gold Dragon
Дата 29.8.2013, 07:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Цитата(ksnk @  29.8.2013,  08:09 Найти цитируемый пост)
А нормальный IDE (phpStorm) не устраняет надобность в квалифицированном экстрасенсе? Он и сам сообразит в каком файле какой класс.
 smile я пользуюсь штормом, вообще не вижу проблем ни с классами ни с функциями. Понятно что это проблемы тех кто до сих пор считает самой лучшей средой разработки блокнот smile

Ну нет у меня проблем с названиями smile Вот я и считаю, что на данном этап namespace в php как-то не доработан. Кроме как для красивости кода, пока актуальности не вижу.. 

Вотпосидел поразмышлял над автозагрузкой классов.. в конечном итоге получилось ни чем не проще простого INI-файла (и то INI-файл для сложных проектов)


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Arantir
Дата 29.8.2013, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 960
Регистрация: 18.11.2012

Репутация: 16
Всего: 55



Цитата(ksnk @  29.8.2013,  06:09 Найти цитируемый пост)
А нормальный IDE (phpStorm) не устраняет надобность в квалифицированном экстрасенсе?

Это была шутка юмора такая  smile 

Цитата(Sanchezzz @  28.8.2013,  21:22 Найти цитируемый пост)
Просто не нужно мудрить с большим количеством папок достаточно 2-3; 

Зависит от обстоятельств. 
Мультимодульность, структура моделей, иные логические разграничения... Веб-приложения бывают самого разного уровня сложности.
Например:
Module\MyModule\Model\Frontend\Forum\Thread
Module\MyModule\Model\Frontend\Forum\Reply
Module\MyModule\Model\Backend\Account\Account
Module\MyModule\Model\Backend\Account\Settings

Module - подключаемые модули.
MyModule - конкретный модуль.
Model - модели.
Frontend - модели веб приложения.
Backend - модели некого удаленного сервера.
Дальше структура самих моделей.

И вроде бы ничего из этого не выкинешь, так как получится сплошной винегрет. 
Хотя в ином проекте вполне может хватать одноуровых Model, Controller и т.д. без модулей и вложенных неймспейсов.


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
Sanchezzz
Дата 29.8.2013, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



Цитата

Зависит от обстоятельств. Мультимодульность, структура моделей, иные логические разграничения... Веб-приложения бывают самого разного уровня сложности.
Да зависит согласен, но это редкий и возможный случай.

Для большого винегрета при частом использование полного пути NP предусмотрены алиасы, что-бы не ###ывало. 

В любом случаи там где используется модель можно предусмотреть метод который будет действовать как фабрика, зачастую модель мы используем непосредственно в контроллере.
Например контроллер знает откуда был вызван из какого модуля, модуль знает свой полный путь. Путь у нас четко повторяет структуру NP как и все вложенные папки.

Дальше создаем в наследуемом классе типа $this->aliasModel('.Frontend.Forum.Thread') , который вернет экземпляр.
Можно для текущего модуля сделать карту  алиасов более короткого имени.
Для вызова моделей их другого модуля тут придется писать уже полный путь алиаса в этом методе или использовать явный вызов по NP и доверить дело autoload

Разработчик уже сам решит как это использовать.

Это сообщение отредактировал(а) Sanchezzz - 29.8.2013, 10:46


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
Gold Dragon
Дата 29.8.2013, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Цитата(Sanchezzz @  29.8.2013,  11:45 Найти цитируемый пост)
Например контроллер знает откуда был вызван из какого модуля, модуль знает свой полный путь. 
что-то малость не понял.. А если я вызываю класс совсем из иного места? Модуль может быть и знает, но вот только путь то получится не корректный



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0871 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.