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

Поиск:

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


Эксперт
***


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

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




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

Код


spl_autoload_register('autoload_class');

function autoload_class($class){
    if(file_exists($_SERVER['DOCUMENT_ROOT'] . "/kernel/classes/" . $class . ".class.php")){
        include_once $_SERVER['DOCUMENT_ROOT'] . "/kernel/classes/" . $class . ".class.php";
    }
}




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


Местный пингвин
****


Профиль
Группа: Модератор
Сообщений: 4076
Регистрация: 17.5.2007

Репутация: 46
Всего: 140



Цитата(Sanchezzz @  20.1.2012,  06:42 Найти цитируемый пост)
spl_autoload_register вызывается только тогда класс не объявлен и при обращении к конкретному классу если он его не находит...

так же как и __autoload()


--------------------
Amazing  smile 
PM MAIL WWW ICQ   Вверх
Absinthe
Дата 20.1.2012, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 5
Всего: 11



Цитата

очень рекомендуют задавать явное подключение
 Цитату из Макконела, пожалуйста.

Цитата

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

Цитата

автолоад может несолько усложнить понимание архитектуры
 Каким же образом? Да даже не усложнить, а просто повлиять на понимание? Любая IDE сама разберется, где какой файл подключается.

Цитата

Всегда желательно явная архитектура особенно в подключаемых файлах. Мало того фактически подключение ведётся в зависимости от абстракции, то есть в индексном файле - окружение, в фабриках - определённые классы абстракций, а использовать функцию для отдельного аспекта как то не резон, лучше всё таки определить это место явно впереди инстанцирования или в индексном файле.
 И что? Посмотри, как автозагрузка работает.

Цитата

При различных видах подключений файлов определённых абстракций приходится обрабатывать ошибки по своему
 Зачем?
PM MAIL   Вверх
Sentox
Дата 20.1.2012, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

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



Цитата(Absinthe @ 20.1.2012,  08:11)

автолоад может несолько усложнить понимание архитектуры
 Каким же образом? Да даже не усложнить, а просто повлиять на понимание? Любая IDE сама разберется, где какой файл подключается.

[/QUOTE]
Честно говоря не хочется вступать в дискусию (всё таки это холивар чистой воды будет smile ).
У Макконнелла, если кто внимательно читал, всё "пропитано" простотой архитектуры и построения и если что то задаётся неявно и можно сделать проще - это нужно сделать. По поводу цитаты - можете сами у Макконнелла да и не только у него найти - пишите для людей (программистов) а не для IDE, да так что бы можно было читать код и не искать где производится включение кода (особенно если касается разработчиков работающих не с IDE (не будем разводить холивар что пора бы уже перебраться на них)). Это меня наводит на программистов на JS, которые пишут имена переменных и функций наподобие "btcdret", как говорится - повбывав бы smile)

Я бы сказал дискусия на тему _autoload() подобна применению директивы goto, так же неявно задаёт смысл читаемого кода.
Без цитат -  smile Макконнелл и его сторонники рекомендуют - прямолинейное "чтение" кода упрощает разработку и особенно  поддержку его последующими разработчиками.

Так же есть затруднение с переносимостью модулей (допустим модулей). При архитектруе фасад и фабрики мы могли бы модуль полностью сделать автономным, при "доверении" подключаемых файлов в __autoload мы лишаемся, некторой части автономности, а детальней при переносе в другой проект он уже потребует сторонних включений своих!!! же файлов, то есть мы перенесём знания структуры модуля во внешнюю структуру ... судите сами smile

Это сообщение отредактировал(а) Sentox - 20.1.2012, 22:54
PM MAIL   Вверх
krundetz
Дата 20.1.2012, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



Sentox, если я правильно понимаю назначание __autoload то это в превую очередь исключение дублирующих include и require, а eже потом все остальное

Это сообщение отредактировал(а) krundetz - 20.1.2012, 23:16


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
Sentox
Дата 20.1.2012, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

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



Цитата(krundetz @ 20.1.2012,  23:16)
Sentox, если я правильно понимаю назначание __autoload то это в превую очередь исключение дублирующих include и require, а eже потом все остальное

Исключение дублирующих include и require - это include_once и require_once (при чём на уровне пхп машины!) всё остальное не должно это надстраивать если это уже до нас сделали.
PM MAIL   Вверх
ksnk
Дата 20.1.2012, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Sentox @  20.1.2012,  22:46 Найти цитируемый пост)
При архитектруе фасад и фабрики мы могли бы модуль полностью сделать автономным, при "доверении" подключаемых файлов в __autoload мы лишаемся, некторой части автономности

Можно на эту тему? Кто в фасаде и фабрике расскажет фабрике где находятся модули?
Не будет ли более корректно отвязать фабрику и фасад от информации о структуре файлов модуля и оставить им только собственную логику? Не повысит ли такая отвязка автономность модуля?


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


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

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



Цитата(ksnk @ 20.1.2012,  23:21)
Цитата(Sentox @  20.1.2012,  22:46 Найти цитируемый пост)
При архитектруе фасад и фабрики мы могли бы модуль полностью сделать автономным, при "доверении" подключаемых файлов в __autoload мы лишаемся, некторой части автономности

Можно на эту тему? Кто в фасаде и фабрике расскажет фабрике где находятся модули?
Не будет ли более корректно отвязать фабрику и фасад от информации о структуре файлов модуля и оставить им только собственную логику? Не повысит ли такая отвязка автономность модуля?

Фактически фасад я упомянул так, для универсальности (скажем так пример модуля компилятора с фасадом к модулю (извините за тавталогию)), а вот фабрика может сама "знать" о с своей структуре и подключать файлы (хотя бы в switch (кстати хороший пример абстрактная фабрика, которая "отрывает" модуль от платформо - зависмости)). Допустим имеем одну фабрику (файл), который является так же и инфраструкторой модуля. При подключении одного файла - фабрики мы включаем в работу весь модуль не отдавая "знаний" включения его структурных файлов, а алгоритм использования модуля лежать может на интерфейсах фасада.

Впринципе это моё мнение.

Добавлено @ 23:39
Цитата(ksnk @ 20.1.2012,  23:21)
Не будет ли более корректно отвязать фабрику и фасад от информации о структуре файлов модуля и оставить им только собственную логику?

Фасад наверное да, скорее всего, а вот фабрика как раз и призвана локализировать по определённой категории, аспекту или абстракции инстанцирование и подключение объектов. Так что её алгоритм основной как раз в этом и состоит.

Добавлено через 12 минут и 33 секунды
Наверное и скорее всего _autoload будет применим к конкретному аспекту подключения основных скриптов ядра системы, хотя честно говоря я не сторонник этого, несколько безответственно даёт разработчикам вносить включения классов, и если система будет раздуваться это грозит сложностями.

Это сообщение отредактировал(а) Sentox - 20.1.2012, 23:40
PM MAIL   Вверх
ksnk
Дата 21.1.2012, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Sentox, ТОесть, что свалить в одну кучу ДВА РАЗНЫХ механизма ( файловую структура модуля и фабричную логику) будет более правильно с точки зрения ООП, чем сделать 2 независимых друг от друга механизма? 


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


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

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



Цитата(ksnk @ 21.1.2012,  00:08)
Sentox, ТОесть, что свалить в одну кучу ДВА РАЗНЫХ механизма ( файловую структура модуля и фабричную логику) будет более правильно с точки зрения ООП, чем сделать 2 независимых друг от друга механизма?

Начнём с первого:
к ООП это точно не относится smile,  (не люблю не аргументированных ответов) - так как ООП (как программирование так и проектирование) структурирует в основном (да ну в основном) данные и призвано к качественному манипулированию данными, но с инфраструтурой лучше справляется именно функциональные решения, поэтому вся инфраструктура может определена в одном методе (функции)

Второе:
вопросом на вопрос - в чём состоит суть фабрики (не абстрактной фабрики), и как лучше разделить аспекты подключения файловой структуры модуля и инстанциирование объектов из классов модуля?

Это сообщение отредактировал(а) Sentox - 21.1.2012, 00:24
PM MAIL   Вверх
ksnk
Дата 21.1.2012, 00:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Sentox @  21.1.2012,  00:22 Найти цитируемый пост)
вопросом на вопрос - в чём состоит суть фабрики (не абстрактной фабрики), и как лучше разделить аспекты подключения файловой структуры модуля и инстанциирование объектов из классов модуля?

Спрашивая о "не абстрактной фабрике" стоит ее как то определить, не так ли? Фабрика, вообще говоря по символическому обозначению предоставляет некий конкретный объект. К примеру, по запросу "дай мне класс для отправки почты", в зависимости от конфигурации приложения и состояния сервера может выдать класс, основанный на mail, smtp или еще какой почтовой приблуде... Фабрика обязана знать КАК инициировать все эти разные классы, однако не обязана знать ГДЕ конкретно они находятся.

Вообще говоря, все разговоры вокруг ООП и стиля программирования обязаны приводить к удобству повторного использования кода. При повторном использовании такой фабрики, в приложении с другой файловой организацией, но с тем-же примерно комплектом серв-объектов, не придется переписывать ее вообще.


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


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

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



Цитата(ksnk @ 21.1.2012,  00:57)
Цитата(Sentox @  21.1.2012,  00:22 Найти цитируемый пост)
вопросом на вопрос - в чём состоит суть фабрики (не абстрактной фабрики), и как лучше разделить аспекты подключения файловой структуры модуля и инстанциирование объектов из классов модуля?

Спрашивая о "не абстрактной фабрике" стоит ее как то определить, не так ли? Фабрика, вообще говоря по символическому обозначению предоставляет некий конкретный объект. К примеру, по запросу "дай мне класс для отправки почты", в зависимости от конфигурации приложения и состояния сервера может выдать класс, основанный на mail, smtp или еще какой почтовой приблуде... Фабрика обязана знать КАК инициировать все эти разные классы, однако не обязана знать ГДЕ конкретно они находятся.

Вообще говоря, все разговоры вокруг ООП и стиля программирования обязаны приводить к удобству повторного использования кода. При повторном использовании такой фабрики, в приложении с другой файловой организацией, но с тем-же примерно комплектом серв-объектов, не придется переписывать ее вообще.

Как же Вы не поймёте что файовая организация модуля локальна для модуля и соответственно фабрики.

Цитата

 Фабрика обязана знать КАК инициировать все эти разные классы, однако не обязана знать ГДЕ конкретно они находятся.

Да нет же, я ж писал выше, она является ещё и инфраструктурой, если хотите index.php для модуля (компонента).
И ещё как должна знать, если она "хочет" быть инфраструктурой модуля и единственной знающей единицей о структуре..

Всё же мой вопрос в силе? Я просто могу пример привести что при выходе "знаний" структуры наружу рушится целостность автономности.

Это сообщение отредактировал(а) Sentox - 21.1.2012, 02:05
PM MAIL   Вверх
Absinthe
Дата 21.1.2012, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 5
Всего: 11



Цитата

Без цитат -   Макконнелл и его сторонники рекомендуют - прямолинейное "чтение" кода упрощает разработку и особенно  поддержку его последующими разработчиками.
 Именно поэтому я за автозагрузку. Наиболее прямой и простой метод без дублирования. В данном случае автозагрузка дает простую иерархическую архитектуру модулей и единую точку подключения.

Цитата

Так же есть затруднение с переносимостью модулей (допустим модулей). При архитектруе фасад и фабрики мы могли бы модуль полностью сделать автономным, при "доверении" подключаемых файлов в __autoload мы лишаемся, некторой части автономности, а детальней при переносе в другой проект он уже потребует сторонних включений своих!!! же файлов, то есть мы перенесём знания структуры модуля во внешнюю структуру ... судите сами 
 Какой части автономности ты лишаешься?

Цитата

И ещё как должна знать, если она "хочет" быть инфраструктурой модуля и единственной знающей единицей о структуре..
 Ей знать не надо, она может просто нужное подключать и оно подключится. spl_autoload_register();

Цитата

то это в превую очередь исключение дублирующих include и require, а eже потом все остальное
 Именно. Эти данные уже есть в архитектуре приложения и при написании их в явном виде происходит дублирование.
Это то же самое, что применение {} скобок: синтаксический анализатор заставляет их использовать по традиции, хотя в явном виде они ему не нужны. И уж тем более не нужны разработчику, т.к. для него код в первую очередь размечен отступами, а не кодом.
PM MAIL   Вверх
krundetz
Дата 21.1.2012, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вечный странник
***


Профиль
Группа: Завсегдатай
Сообщений: 1400
Регистрация: 14.6.2007
Где: НН(Сормово)

Репутация: 20
Всего: 69



Цитата(Sentox @  20.1.2012,  23:19 Найти цитируемый пост)
Исключение дублирующих include и require - это include_once и require_once (при чём на уровне пхп машины!) всё остальное не должно это надстраивать если это уже до нас сделали.

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


--------------------
!цензоры - Хранитель стратегической жидкости
Группа ТГВ
Группа Нижний Новгород
user posted image
PM MAIL   Вверх
ksnk
Дата 21.1.2012, 09:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Sentox @  21.1.2012,  01:49 Найти цитируемый пост)
Всё же мой вопрос в силе? Я просто могу пример привести что при выходе "знаний" структуры наружу рушится целостность автономности.

Хотелось бы увидеть.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.3499 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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