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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильнее подключать и использовать класс? 
:(
    Опции темы
Gold Dragon
Дата 28.6.2011, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Как правильнее подключать и использовать класс?

Так?
Код

$GDK = new GDK();

switch($task) {
    case 'page1':
        gdk_page1($GDK);
        break;
    case 'page2':
        gdk_page2($GDK);
        break;
    default:    // главная страница компонента
    gdk_page0($GDK);
}
function gdk_page0($GDK){
//.....
}
function gdk_page1($GDK){
//.....
}
function gdk_page1($GDK){
//.....
}

или так?
Код

switch($task) {
    case 'page1':
        gdk_page1();
        break;
    case 'page2':
        gdk_page2();
        break;
    default:    // главная страница компонента
    gdk_page0();
}
function gdk_page0(){
    $GDK = new GDK();
//.....
}
function gdk_page1(){
    $GDK = new GDK();
//.....
}
function gdk_page1(){
    $GDK = new GDK();
//.....
}



Это сообщение отредактировал(а) Gold Dragon - 28.6.2011, 17:51


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


Шустрый
*


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

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



Судя вашей логике, можно даже и так
Код

$GDK = new GDK();
switch($task) {
    case 'page1':
        gdk_page1();
        break;
    case 'page2':
        gdk_page2();
        break;
    default:    // главная страница компонента
    gdk_page0();
}
function gdk_page0(){
//.....
}
function gdk_page1(){
//.....
}
function gdk_page1(){
//.....



А вообще как-то неправильно выглядит эта конструкция вся. Сам подход.
--------------------
Не бойтесь совершенства, Вы все равно его не достигнете (с) ...
PM MAIL   Вверх
Gold Dragon
Дата 28.6.2011, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Valinur, поясни?

Добавлено через 45 секунд
Цитата(Valinur @  28.6.2011,  19:03 Найти цитируемый пост)
Судя вашей логике, можно даже и так
а как функции получат глобальную переменную?



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


Шустрый
*


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

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



Цитата(Gold Dragon @  28.6.2011,  18:09 Найти цитируемый пост)
а как функции получат глобальную переменную?

Да, простите, как-то не подумал об этом. Но у нас ведь есть ООП.
Почему бы не завести класс, одним из членов которой был бы как раз $GDK? И тогда в каждой функции просто пришлось бы обращаться только к $this->GDK

Мне правда не известны детали вашего кода.... Но конкретно в вашем примере, я бы использовал первый вариант в силу обратной совместимости:
Код

$GDK = new GDK();
switch($task) {
    case 'page1':
        gdk_page1($GDK);
        break;
    case 'page2':
        gdk_page2($GDK);
        break;
    default:    // главная страница компонента
    gdk_page0($GDK);
}
function gdk_page0($GDK){
//.....
}
function gdk_page1($GDK){
//.....
}
function gdk_page1($GDK){
//.....



Т.е. если вдруг нам придется менять вызов конструктора, передавать ему какие-то аргументы, или например после создания объекта надо будет его настроить, то это надо будет сделать только в одном месте - в самом начале, а не бегать по каждой функции.
--------------------
Не бойтесь совершенства, Вы все равно его не достигнете (с) ...
PM MAIL   Вверх
Gold Dragon
Дата 28.6.2011, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Valinur @  28.6.2011,  19:27 Найти цитируемый пост)
И тогда в каждой функции просто пришлось бы обращаться только к $this->GDK
это функции, а не методы smile Они вне класса

Я тоже склоняюсь к первому варианту, он намного проще и более понятен.. Но скажется ли это на работе? Ведь в первом случае мы создаём глобальную переменную, а она достаточно большая, и гоняем её. Во втором случае мы создаём только локальные переменные, которые умирают после завершения функции



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


Шустрый
*


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

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



Цитата(Gold Dragon @  28.6.2011,  18:42 Найти цитируемый пост)
это функции, а не методы  Они вне класса

Да, конечно. Но никто не мешает их сделать членами класса.

Цитата(Gold Dragon @  28.6.2011,  18:42 Найти цитируемый пост)
Ведь в первом случае мы создаём глобальную переменную, а она достаточно большая, и гоняем её. Во втором случае мы создаём только локальные переменные, которые умирают после завершения функции

А unset-нуть нельзя разве ее после?
--------------------
Не бойтесь совершенства, Вы все равно его не достигнете (с) ...
PM MAIL   Вверх
Gold Dragon
Дата 28.6.2011, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Valinur @  28.6.2011,  19:47 Найти цитируемый пост)
А unset-нуть нельзя разве ее после? 
а зачем лишний код smile



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


Шустрый
*


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

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



Почему же лишний? Вполне себе уместное применение функции unset. Подчищаем мусор за собой. Ну или можно "сунуть" его в деструктор этого объекта, если не хотим "лишнего" кода.
--------------------
Не бойтесь совершенства, Вы все равно его не достигнете (с) ...
PM MAIL   Вверх
Absinthe
Дата 28.6.2011, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Вполне себе уместное применение функции unset. 
Цитата

Но у нас ведь есть ООП.
 Противоречие.

Добавлено через 30 секунд
Топикстартер, ru.wikipedia.org/wiki/Абстрактная_фабрика
PM MAIL   Вверх
Valinur
Дата 28.6.2011, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Absinthe @  28.6.2011,  21:01 Найти цитируемый пост)
 Противоречие.

Ну или можно "сунуть" его в деструктор этого объекта, если не хотим "лишнего" кода. 
--------------------
Не бойтесь совершенства, Вы все равно его не достигнете (с) ...
PM MAIL   Вверх
Absinthe
Дата 29.6.2011, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Ну или можно "сунуть" его в деструктор этого объекта, если не хотим "лишнего" кода. 
 Я не понял, хотел бы пример.

Это сообщение отредактировал(а) Absinthe - 29.6.2011, 00:31
PM MAIL   Вверх
Gold Dragon
Дата 29.6.2011, 05:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Absinthe, поясни по абстрактной фабрике


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


Опытный
**


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

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



Gold Dragon, создание объектов - это типовая ситуация, поэтому для создания объектов применяются типовые решения.
Одно из таких решений - абстрактная фабрика, мне показалось, что оно подойдет тебе. Можешь посмотреть другие типовые решения.
Использование таких решений вместо корявых велосипедов делает код проще и читаемее. И не надо думать, как извратиться с велосипедом.

А unset применяется только для удаления элементов массива. Если удаляешь переменные - это костыль для устранение части последствий какой-то проблемы(но не самой проблемы).

PM MAIL   Вверх
Gold Dragon
Дата 30.6.2011, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Absinthe, нарыл кучу статей, прочитал. Но,к сожалению, не понял этот принцип. Я то душой понимаю что это хорошо. Даже реально видел как с ним работают разные CMS. Но что-то мне не хватает в мозгу smile прям чуть-чуть ... Все примеры какие встречал - просто перепечатка одного и того же со своими тонкостями.. Мне бы на очень простом примере с подробным пояснением ;)


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


Опытный
**


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

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



Цитата

Мне бы на очень простом примере с подробным пояснением ;)
 Пока не научишься грамотно использовать ООП, паттерны трогать не стоит.
Чтобы научиться грамотно использовать ООП освой 1-2 фреймворка. Например ZF и что-то из Yii/Kohana.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0986 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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