- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу

Что делать, если ваша email-рассылка попала в спам
10 распространенных причин и решений
Екатерина Ткаченко
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
К примеру, если у вас есть задача написать высоконагруженный проект, где основное требование - быстродействие, выбирали бы ли вы фреймворки с написанными кем-то классами (наверняка не совсем отимальными) или писали бы свои функции/классы.
Фреймворки удобны разработчикам, а вот с точки зрения продуктивности приложения какая ситуация.
Выбрал бы фреймворк, что кстати уже не однократно делал. Тормоза чаще всего не в коде, а во взаимодействии кода и базы. И фреймворк тут помогает не тратить время на то, что можно сделать быстро и качественно (код, кеширование и пр.), а потратить время с умом на проектирование хранения данных.
> Вообще лезть в фреймворк не зная классов - имхо не правильно.
Топикстартер пишет про классы: "Для каких целей они нужны я не понял даже прочитав книгу для чайников".
Нормальный учебный процесс - сначала теория, потом практика. Лучшая практика - реальная задача. Лучший инструмент для учебной практики - простой и без излишеств, про который написано много-много доков, факов, разжеванных примеров и есть у кого спросить. Для этой цели лучше всего подходит CodeIgniter.
Разберется - пойдет дальше, может когда в "лучших" традициях PHP свой фреймворк изобретет или перескочит на Zend,Symphony, Cake, YII, Kochana...
Мне вот это чудо очень нравится http://complexml.org/ru/docs Жаль что слишком много своих наработок. А так бы обязательно к нему привязался бы.
> вы можете испугаться и тут же выскочить на привычный вам берег процедурного программирования.
И тогда лучше думать о смене профессии. Оно все-таки 21 век. PHP/ FI 2.0 остался в прошлом веке.
Иллюстрировать преимущества ООП лучше всего на примерах.
Например задача: получить информацию о всех файлах в директории, и узнать их дату модификации.
Как это делалось бы в функциональном программировании:
Вполне злободневная задачка. Как это можно решить с помощью ООП, используя DirectoryIterator?
Наверное вторая запись выглядит понятнее?
И в тему о фреймверках. Разбирал CI, работал с Коханой, тыкался в Zend Framework. Для новичка очень трудно понять обилие классов, и то какой класс важнее, какой нужно использовать и так далее. То есть к разбору кода довольно сложных фреймверков, которых вы насоветовали, лучше приступать с прочтения книжки или документации, или хотя бы c основ работы с ними. Да и вообще не с фреймверков начинать нужно.
Я начал и до сих пор использую примитивный MVC фреймверк, в котором кроме классов Dispatcher, Controller, Record и View больше ничего нет. И новичку, в принципе, для старта больше ничего и не нужно.
Второй пример - это как раз тот случай, когда ООП используется ради "ООП ведь как это круто, а на процедурах лохи программируют!". В результате чего, каждую функцию php оборачивают в объект ... и используют снова как функцию, только уже вызывая объект.
Если первый пример быстр и понятен, то второй пример имеет кучу оверкода в классах и на каждый файл создает дополнительный объект. Одним словом прекрасный пример как засунуть ООП туда, где он совершенно не нужен.
"$file->isDot()" вообще убивает, нафига вне класса проверять на мусор, класс сам это не в состоянии сделать ? :)
Разбирал CI, работал с Коханой, тыкался в Zend Framework. Для новичка очень трудно понять обилие классов, сложных фреймверков, которых вы насоветовали
Вообще-то я не советовал Zend, а CI крайне примитивен. Проще то уж нельзя придумать.
Да и вообще не с фреймверков начинать нужно.
м.б. но тогда с 90% вероятностью получится тюря где в функциональной водке плавают хлебные корочки ООП, типа того что вы продемонстрировали в своем примере.
Второй пример - это как раз тот случай, когда ООП используется ради "ООП ведь как это круто, а на процедурах лохи программируют!". В результате чего, каждую функцию php оборачивают в объект ... и используют снова как функцию, только уже вызывая объект.
Если первый пример быстр и понятен, то второй пример имеет кучу оверкода в классах и на каждый файл создает дополнительный объект. Одним словом прекрасный пример как засунуть ООП туда, где он совершенно не нужен.
"$file->isDot()" вообще убивает, нафига вне класса проверять на мусор, класс сам это не в состоянии сделать ? :)
А если так:
Так проще? =)
но тогда с 90% вероятностью получится тюря где в функциональной водке плавают хлебные корочки ООП, типа того что вы продемонстрировали в своем примере.
Отличный для некоторых проектов вариант, кстати. Именно так написан vbulletin 3.
От программиста дополнений таким образом не требуется понимание методологий ООП. Просто копируй код из других дополнений, вставляй в свою тюрю и решишь свою задачу.
Так проще, но все равно, объясните мне вообще смысл делать отдельный класс на чтение директории ? Хотя возможно пример глупый с файлами, кроме вопроса "нафига так делать" он ничего не вызывает. Точно так же я могу сделать отдельную функцию readDirFiles(); и использовать ее с таким же успехом. Разницы ни какой.
Для меня прелесть классов в возможности создавать читаемые имена и иметь единое пространство данных внутри программы. А оборачивать элементарные функции в класс, ну его нафиг. Видел как люди с 100% OOP скриптом, даже print делали как $print->show('Hello world');
ОПП не нужен, Кармак его не юзает! 😂
__________________
Мой сайтец
Так проще, но все равно, объясните мне вообще смысл делать отдельный класс на чтение директории ? Хотя возможно пример глупый с файлами, кроме вопроса "нафига так делать" он ничего не вызывает. Точно так же я могу сделать отдельную функцию readDirFiles(); и использовать ее с таким же успехом. Разницы ни какой.
Да легко... Например, есть базовый класс, для основных действий (обход директорий, копирование, перемещение и пр.). И есть наследуемые, которые по расширению файла делают определенные действия (например, .rar|.zip|.7z - отправлять на ftp, .txt|.rtf|.doc|.xml - конвертировать и копировать в определенные папки и т.д.). На функциях получится примерно так: определяем расширение, вызываем нужную функцию:
Дальше враппер делает определенные действия, заложенные алгоритмом. Все верно? На классах примерно так-же:
Набросок на классах. А теперь самое интересное: что произойдет, когда надо будет 7z обрабатывать отдельно? Например, добавить новый файл в архив и описание, оставив его на месте?
На функциях - правим основной код, на классах - нужный класс, не трогая остальное (а значит, меньше риска что вообще поломаем код приложения).
Никто не спорит, что все, что можно сделать на классах можно сделать и на функциях. Но ООП сильно (ОЧЕНЬ СИЛЬНО) упрощает поддержку ;)
Кстати, советую поизучать кохану. За счет хорошей файловой структуры ООП там показывает всю свою силу. Не трогая сам фреймворк его-же (фреймворк, т.е.) можно изменять!! Попробуйте реализовать подобное на функциях. Как уже говорил - это возможно, но очень сложно, а уж поддерживать - лучше сразу застрелиться =)))
Для меня прелесть классов в возможности создавать читаемые имена и иметь единое пространство данных внутри программы. А оборачивать элементарные функции в класс, ну его нафиг. Видел как люди с 100% OOP скриптом, даже print делали как $print->show('Hello world');
Ну это вы тоже очень зря. Еще раз предлагаю посмотреть ko3. Все хелперы - статичные классы с кучей методов. И каждый можно заменить на свое, не трогая другие.
Пример с тем-же print, а точнее var_dump... Можно сделать просто var_dump, а можно обернуть его в статичный метод класса. Для чего? Чтобы потом, через неделю-две, переписать: будет не просто выводиться результат, но еще и отправляться на мыло, например =)))