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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функции всеместного применения, Куда впихнуть? :) 
:(
    Опции темы
CyClon
  Дата 27.11.2007, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Собственно, медленно, очень медленно, но верно продвигается написание собственной CMS smile Меня заинтересовал вопрос хранения и использование функций повсеместного назначения (например: функция конвертирования велечин (B - KB - MB - GB), фунция проверки e-mail на валидность, функция проверки еще чего-то и т.п.) - то есть функций, которые могут использоваться очень часто (точнее  - в нескольких модулях, например функция конвертирования может использоваться в файловом архиве (показывать размер загруженного файла) и личном аккаунте (показывать размер загруженной аватары)). Вот и возникает вопрос, где их хранить и как использовать. Раньше придерживался мнения, что неплохим решением было бы сделать файл functions.php и запихнуть туда все функции или же создать папочку functions, а в ней файлы в форме 1 файл = 1 функция и подключать потом. Но на дворе-то эра ООП smile И в каком-то топике меня подтолкнули на мысль о хранении функций в классах. То есть, как я понял, создаем класс Convert, а в нем методы - конвертирование градусов в фаренгейты, мегабайтов в байты, паролей в специальные самописные хеши), класс Check с методами проверки мыл, доступности хостов, имен пользователей и т.д. Хотя и с виду это все красиво (ООП), но я не вижу в этом приемуществ перед функциями (Разве что __autoload).

Собственно, хочу подискуссировать на эту тему %) Может кто-то уже на этом, как говориться, "собаку съел" и поделится советами?


--------------------
user posted image
PM   Вверх
mishaSL
Дата 27.11.2007, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1046
Регистрация: 10.1.2007
Где: Санкт-Петербург

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



CyClon, если у тебя множество функций и их можно разделить по смысловому или какому-то еще понятному и удобному для тебя принципу, то тогда можно и удобнее будет раскидать все функции по классам и объявить методы статическими. Если же твой набор функций никак не разделить по какому-либо критерию, то смысла все их объединять в класс нет.

Пример:
Код

<?php

class Validate
{
    public static function email($email)
    {
        //Проверка e-mail
    }
    
    public static function string($string)
    {
        //Проверка строки
    }

    public static function numeric($numeric)
    {
        //Проверка числа
    }

}

class Convert
{
    public static function B2Kb($varible)
    {
        //Реализация
    }    

    public static function Kb2B($varible)
    {
        //Реализация
    }    

}


if (Validate::email('[email protected]')) {
    //...
}

?>




--------------------
Лучший способ научиться программированию - это посмотреть как это делают другие...
PM MAIL   Вверх
WolfON
Дата 27.11.2007, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Не надо пихать ооп просто из-за идеи, если это не удобно.
Самый очевидный, простой и удобный способ - сделать класс, библиотеку функций, со статическими методами - нужными функциями, а его подгружать автолоадом.
PM MAIL ICQ   Вверх
CyClon
Дата 27.11.2007, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ммм... Насколько я помню, __autoload срабатывает только при объявлении ($obj = new class) класса? Или при обращении к статическим методам тоже?


--------------------
user posted image
PM   Вверх
Anarki
Дата 27.11.2007, 22:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(CyClon @  27.11.2007,  22:58 Найти цитируемый пост)
Ммм... Насколько я помню, __autoload срабатывает только при объявлении ($obj = new class) класса? Или при обращении к статическим методам тоже?

При вызове статических методов/получении статических свойств класса(без создания объекта) - тоже срабатывает в PHP5

Это сообщение отредактировал(а) Anarki - 27.11.2007, 22:18


--------------------
PM WWW   Вверх
FractalizeR
Дата 27.12.2007, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я у себя такой автолоадер написал:
Код
<?php

/**
 * Autoloading classes
 *
 * @param string $className Class name to load
 */
function __autoload($className) {
    $classNameParts = explode('_', $className);
    unset($classNameParts [0]);
    $pathToClassFile = implode(DIRECTORY_SEPARATOR, $classNameParts);
    
    require_once dirname(__FILE__) . '/' . $pathToClassFile . '.php';
}

?>


Имена классов в проекте такие: Fractal_MySQLDb_Connection. Файл, содержащий этот класс лежит в папке MySQLDb и называется Connection.class.php


--------------------
Чтобы поблагодарить или наоборот поругать участника форума лучше пользоваться значками "+" и "-", изменяющими репутацию. Они находятся слева от поста под именем пользователя.
PM MAIL   Вверх
CyClon
Дата 24.2.2008, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хм, интересная идея smile Нужно будет тоже так сделать smile

Если имя класса не содержит "_" - делать include('kernel/classes/' . $className . '.class.php'), если содержит - входить в подкаталоги и инклюдить уже оттуда.

Добавлено через 1 минуту и 23 секунды
Ну, а по сабжу что посоветуете, кто как делает? Разбить функции по группам и загнать в классы?


--------------------
user posted image
PM   Вверх
GeneralElectric
Дата 24.2.2008, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(CyClon @  27.11.2007,  18:35 Найти цитируемый пост)
создаем класс Convert, а в нем методы - конвертирование градусов в фаренгейты, 

Тебя обманули. Это не имеет никакого отношения к ООП.

PM MAIL   Вверх
flashaa
Дата 24.2.2008, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(FractalizeR @  27.12.2007,  20:09 Найти цитируемый пост)
Я у себя такой автолоадер написал:

У Котерова примерно такая же идея. Вообще, если не ошибаюсь, такая идея хранения классов и их подгрузки взята из PEAR. Ведь там тоже классы называются HTML_Template, HTML_ .. к примеру.

Не кажется ли слишком сложным? Думаю одна папка с классами будет удовлетворять всем требованиям.
PM MAIL   Вверх
CyClon
Дата 24.2.2008, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



flashaa, как раз-таки одна папка не есть гуд, я об этом уже как-то думал. Подумай - есть класс DB и классы MySQL, MSSQL и еще куча подобных. Сбрасывать это все в одну папку (где будут храниться классы Convert, Agent, Log и т.п. неразумно). Будет разумнее так (опять же мое ИМХО):

Код
/
++++/kernel/
++++/classes/
++++++++/DB/
++++++++++++MySQL.class.php
++++++++++++MSSQL.class.php
++++++++++++Oracle.class.php
++++++++Agent.class.php
++++++++DB.class.php
++++/modules/
++++index.php


Соотстветвенно, будет класс DB и будет класс DB_MySQL extends DB.

Или у кого-то есть более рациональные предложения по именованию/размещения файлов классов в файловой системе? smile

Это сообщение отредактировал(а) CyClon - 24.2.2008, 13:31


--------------------
user posted image
PM   Вверх
flashaa
Дата 27.2.2008, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



CyClon, сколько всего будет классов? У меня до 20 доходит и не чувствуется неудобство.
PM MAIL   Вверх
FractalizeR
Дата 8.3.2008, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(flashaa @ 24.2.2008,  12:51)
Цитата(FractalizeR @  27.12.2007,  20:09 Найти цитируемый пост)
Я у себя такой автолоадер написал:

Не кажется ли слишком сложным? Думаю одна папка с классами будет удовлетворять всем требованиям.

Думаю, аоборот, будет очень просто, красиво и логично. smile


--------------------
Чтобы поблагодарить или наоборот поругать участника форума лучше пользоваться значками "+" и "-", изменяющими репутацию. Они находятся слева от поста под именем пользователя.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

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


 




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


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

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