Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Очень хорошее определение :)) Ну раз другого нет, то я буду понимать под перегрузкой возможность в зависимости от количества и типов переменных вызывать тот или иной метод (поскольку часто перегрузкой называют то, что происходит при полиморфизме).
В таком рассмотрении перегрузка:
- есть зло, поскольку нифига не упрощает работу по поддержке кода;
- не является одним из необходимых условий для того чтобы считать язык ОО.
1. РНР слаботипизованный язык, в этом есть свои плюсы и свои минусы. Но такая особенность дает больше гибкости в написании веб-приложений. Поэтому перегрузка методов в зависимости от принимаемых типов - вообще говоря противоречит идеалогии языка.
2. Много кода - это один вызов func_get_args()?
3. Что-то мне подсказывает, что если для конструктора потребовалось передавать переменное количество параметров, то это косяки в проектировании объектной структуры программы.
О как. Можно результаты тестов увидеть? По моим данным, возможные задержки при ОО подходе в РНР много меньше тех, что вносят кривые руки программистов.
А если все же возникает необходимость в этой экономии на спичках, то значит помочь тут может только чистый С(++), но уж никак не Ruby и не Java.
1. Передача произвольного количества параметров. Задача решается func_get_args.
2. Передаются разные типы данных. Напомню - РНР - слаботипизованный язык. Для большинства веб-орентированных задач это является большим плюсом.
Если нам нужно в зависимости от типа передаваемого аргумента по разному их обрабатывать, то имеет место быть не правильно спроектированная система.
Но даже в таком случае я не понимаю в чем преимущество разноса на несколько одинаковоназывающихся методов вместо сохранения логики в одном методе.
Разумеется в РНР это не снимает с программиста ответственности за верификацию данных. Тип данных придется проверять безусловно (хотя никто не мешает жестко задать пользовательский тип при аргументе). А проверять значения аргументов - надо в любом языке.
sun.com и ibm.com - сложно считать эти проекты высоконагруженными.
Да, и это единственная возможность правильно решать задачу. Потому что в случае использования перегрузки Вы не сможете описать все возможные варианты.
Это не пример. Это абстрактная задача :) Если в реальности возникает такая необходимость - 99% за то что система не правильно спроектирована. Если _вдруг_ такая необходимость возникает - передавайте только объект :)
Так в РНР предлагется именно такое же решение, но "повернутое" в обратную сторону - если нужна типизация - указывайте в качестве типа аргумента свой класс, от которого должен быть создан ваш объект. Таким образом и сохранятеся слабая типизация, и при необходимости можно задать ее жестко. Очень красивое решение. :)
Думаю меньше чем на - http://www.habrahabr.ru/blog/webdev/5054… + мамба для кучи. У яхи есть еще ряд сервисов, работающих под РНР. Кстати тот же ibm очень активно продвигает РНР в массы.
ООП-модель приближается к Java, а не
ООП-модель сравнима с Java
Не очень понятно о чем речь. Можно поподробнее?
Это Вы о чем? РНР - плохой шаблонизатор? ;)
PDO?
Использование класссов с методами static - решает эту проблему.
это проблема не языка, а архитектора системы
об этом я уже спрашивал - результаты тестов?
"стандартных" функций в РНР не так много, и (на сколько я помню) они все используют исключения.
Что касается расширений (extension), то их не правильно рассматривать как часть РНР. Вот они еще не все переписаны с учетом механизма исключений.
эээ... мы о какой скорости сейчас говорим?
А где там отделение логики приложения от вывода? Под PHP есть неплохие сторонние шаблонизаторы к примеру smarty. Но имеющийся по умолчанию шаблонизатор довольно странный.
Или это нормально, что скорость работы реализации на java в два раза быстрее чем нативного интерпретатора ?А они код зазендили? С этим сравнивать надо было, на мой взгляд.
То, что там по умолчанию, я бы вообще шаблонизатором не назвал.
Впрочем, это не проблема языка, а программистов. Хочется разделение — юзайте MVC плюс сторониий шаблонизатор.
А они код зазендили? С этим сравнивать надо было, на мой взгляд.
Для абсолютного большинства веб-приложений это не является проблемой.
Мы все время натыкаемся на одно и тоже - все зависит от того как программист напишет проект, т.е. на человеческий фактор.
Понимаете если уж язык назвался языком для веба, то он должен уметь такие вещи из коробки. Иначе в чем его приемущество между языком общего прикладного характера?
Что нам мешает шаблон вывода вынести в отдельный php файл и там написать:
Далле инклюдим шаблон. Все остальное - варианции. Это что касается разделения логики и вывода. Что же за шаблонизатор "по умолчанию" для меня так и осталось загадкой.
В PHP есть не сторонний а встроенный шаблонизатор. Крайне убогий. Поэтому им мало кто пользуется.
Чем не устраивает PDO? Ко всему есть такое количество различных реализаций абстракных уровней БД, что у программиста есть постине огромный выбор вариантов.
ADO PDO хотелось бы единообразия. Зачем мне большой выбор? Мне достаточно было бы интерфейса аля JDBC в java или DBI в Perl. Зачем иметь много разных реализаций абстракции и при этом не иметь стандартной?
Мы сейчас говорим об слишком абстрактных вариантах использования. В каждом конкретном случае нужно искать свое решение. Для внешних модулей я бы предпочел использовать свой собственный враппер.
Свои слои абстракции это конечно хорошо... но все должно иметь свой предел :) В PHP же частенько приходится брать или чужой велосипед или придумывать свой. Вот это мне неочень в нем нравится.
Скорее что так оно и есть :)
Я тестировал на одной и той же машине. Хотя вполне возможно это издержки большей вложенности кода у проектов на ООП.
Отдельный список не встречал.
Тогда каким образом узнать генерит или нет? Просто если их генерит 10% всех функций PHP то механизм при работе с функциями PHP бесполезен.
А почему нет? если лицензия позволяет.
Хотя бы потому, что потом их доставить довольно сложно. В этом ксати с моей точки зрения большая неудача PHP. Если бы был только определенный минимум заложен в ядро, а все остальные промочки писались на PHP возможно было бы лучше.
Посмотрел по диагонали, но кроме постоянного "fast, safe, and easy" не встретил ничего о тестировании. Но из общих соображений - такого не может быть в принципе.
Это не они тестировали, а пользователи. Там кстати тоже были вопросы, а вы с акселератором сравнивали? Им сказали нет, но щас воткнем. Проверили с акселератором APC получили разницу в два раза в сторону Resin с Quercus, без акселератора было в пять раз лучше. А почему не может быть в принципе? Там PHP преобразовывается в сервлет точно так же как JSP. Т.е. работает по сути уже откомпилированный и висящий в памяти сервлет, запуск копии которого минимальны. К тому же там на все приложения использующие СУБД не взирая используют они постоянные соединения или нет пропускаются через пулл соединений к СУБД. Так что учитывая скорость этого java сервера, я вполне этому верю.
Так и пишите их не на РНР :) Я разве где-то утверждал, что РНР является панацеей от всех бед? ;) Язык позволяет решать очень широкий спектр задач и это прекрасно. Естестественно что у языка есть области, в которых его использование не реально. Я просто уверен, что Java имеет свои ограничения (не являясь спецом по Java - не могу назвать конкретных ограничений).
Все зависит от настройек persistent connection в ини-файле, и имеют кучу потенциальных проблем.
Язык никому ничего не должен :) Да и идеалогия такова - нужен такой модуль - подключаешь (или собираешь с ним) - он у тебя есть. Не нужен, не включаешь. Коробки, как таковой нет. И это - хорошо, это одно из преимуществ.
Еще одно - язык позволяет реализовать так, удобно разработчику. Удобно следовать MVC - следуй, нет - нет. Удобно писать в функциональном стиле - пиши. Веб-приложения предъявляют очень разные требования, к языку и преимущество РНР в том, что он может удовлетворить большинству требований.
Очень хочется увидеть ссылку на этот чудо-шаблонизатор. А то за 8 лет так ни разу с ним не столкнулся :)
Хотите однообразия - напишите один раз (или возьмите сторонний) клаас, реализующий паттерн "фабрика", напишите (или воспользуйтест сторонними) врапперами для различных баз - получите универсальный инструмент работы с БД. Не нравится такой подход - пользуйтесь стандартным PDO. Язык не навязывает программисту решение, он предлагает ему инструмент - это еще один плюс.
А есть какой-то другой, третий способ? Имхо, либо свой, либо чужей - больше вариантов нет :)
Можно лишь полагаться на заявления ведущих разработчиков языка о том, что скорость практически не различается.
Думаю только чтением мана. Чесно - не задавался целью. Пока по старинке обрабатываю.
Под виндой - раскомментировать dll, в *nix - http://www.php.net/manual/en/install.pec…
>все остальные промочки писались на PHP возможно было бы лучше
Может и лучше, но согласитесь откомпилированный С работать будет на порядки быстрее, чем РНР-код.
Без результатов и описания тестов - все слова. Надо смотреть тесты, надо смотреть на сколько они синтетические.
Тут скорее не к языку претензии, а к той же муське.
Ну это сложно назвать "встроеным" шаблонизатором :))) Сам по себе РНР, в таком случае, и является "встроенным" шаблонизатором.
А она есть - та, что Вы сами для себя выберите. :) Одной из сильных сторон РНР является то, что он ни к чему не принуждает, позволяет делать так, как удобно разработчику. Один раз написав свое (если чужое не подошло), и пользуйтесь во всех проектах. Лично я так и сделал. Если хочется стандартов - используйте PDO от разработчиков.
Разруха не в клозетах, а в головах :) То, что язык предъявляет не высокие требования к разработчику - в определенных моментах является минусом.
Но если язык будет очень строг, не спасет от не понимания разработчиком зачем сделано именно так, а не иначе.
Встречаются индивидуумы, которые 5 лет пишут на дельфях и ни разу за это время не видели реального кода. Программисты, пишущие мышкой, блин.
Есть достаточное количество фреймворков под РНР, у большинства имеется достаточно стройная модель - используйте их :) Нужно просто принять тот факт, что разработчик является центральной фигурой, он определяет то, как ему удобно работать. Разработчики языка - не навязывают решения. И мне например, как раз нравится.
агрессия у меня возникает когда я вижу заядлых Сишников пытающихся обосрать все другие модели классов по причине того что они не так наворочены.
а о том что большая часть тех возможностей что реализованы в языке, предназначенном для построения системных приложений, вообще не нужны в интерпретируемом языке для формирования гипертекста они думать не хотят.
Я писал и на том и на том и могу сказать что такого бредового ООП я больше нигде не видел.
и я с облегчением воспринял удобные классы в php5, хотя долгое время тоже писал на c++...
удобны тем что нет ничего лишнего (хотя может быть конечно коечего пока нехватает)... раз.
удобны обратной связью - возможностью прямо внутри кода отследить имена класса его предков, методов и методов его предка а так же полей... и т.д. и т.п.
Переменные указывают на объект
Фокус-покус:
nogpyra = "Даша"
k_HAM_B_rocTu_ugeT = nogpyra
puts nogpyra #-> "Даша", разумеется
k_HAM_B_rocTu_ugeT[0] = "М" # меняем первую (номер ноль) букву у переменной-строки
puts nogpyra #-> "Маша"
Синтаксис не из самых приятных, но возможно мне так только по началу показалось.
Кое-что навеяно из C#,
Мне он кажется каким-то слишком усложненным, вот даже не знаю, к добру ли оргомное кол-во разнообразных синтаксических конструкций.
А в противовес гибкости языка наверно можно поставить то, что при таких богатых возможностях синтаксиса не всегда интуитивно представляешь, как поведет себя та или иная языковая конструкция.
Очень хочется, чтобы кто-нибуть создал опрос на тему "Ruby & PHP".
Лично мне больше импонирует старикашка PHP, но я стараюсь быть обьективным.
Как говорил когда-то один очень хороший преподаватель: "Я абсолютно обьективный человек. Кому что захочу то и поставлю" :)
У меня под боком нагрзочный проект, который парни построили на Django. Ничего хорошего не вышло и вряд ли выйдет. …И все потому, что универсальные решения всегда хуже специализированных.
Средней разработчик экономит на времени разработки. Время важная штука конечно, но и о качестве помнить нужно.
Можно поинтересоваться какие специализированные решения имеются ввиду?
Вам будет сложно сделать что-то некачественно придерживаясь идеологии фреймворка.
Конечно, хотя странно слышать такой вопрос. Очень. Подумайте о том, почему существуют легковесные веб-серверы, как они обычно используются и кто стоит за ними.
Спасибо, скрасили субботний вечер. В лучшем случае фреймворк диктует общую архитектуру приложений, но — сделать что-то некачественно только благодаря его использованию?! :-) Мне кажется, ваш опыт еще не перевесил ваше же убеждение в чудесности и общей божественности „данных нам фреймворков“.
Хорошо задам вопрос по-другому. Чем плохо использование легковесного веб-сервера с FastCGI и django в режиме FastCGI?
Если интересно, прочитайте заметку Контролируемое скачивание 2 ведущего разработчика того самого нагрузочного проекта. По прочтении вам должно стать понятно, насколько помог мега-фреймфорк решить конкретную бизнес-задачу.
Разговор не о django, а о том, что привносит использование исключительно „универсальных“ решений.
Да, у меня имеются, и для решения этих случаев я использую специально заточенный код, который либо вырабатывается самостоятельно, либо соскребается напильником с чужого. Это не швейцарский нож, и в этом нет ничего плохого.
Фреймворки уровня ror и django хороши для области обобщенных и сравнительно легких бизнес-задач: блоги, полупустые каталоги, etc.
Вот когда нужно что-то серьезное и более важное, чем удобство и удовольствие разработчика, вот тогда разработчик берет грабли, наклоняется, и начинает разгребать.
Под lighttpd с FastCGI чуть меньше — 18 - 22 МБ.
То, что вам нужно, делается связкой nginx+php или lighttpd+php и работать будет замечательно.
Что Вы понимаете под контролем скачивания и сессиями?:)
У нас исключительно на lighttpd+php сделан контроль доступа (можно прикрутить любую логику - авторизация, url expiration, лимитирование по IP адресам и странам), ограничение по каналу, ограничение по трафику (в ГБ), учет закачек на уровне 1) сколько байт какого файла какой юзер скачал 2) сколько попыток сделал юзер 3) какая скорость была у юзера.
Вам процитировать из выше приведенной статьи, что там под этим понималось или как?
И файлы отдает сам сервер. Но ни как не php так?
Напомню вкратце, на какой схеме я остановился в прошлый раз.
* клиент обращается за скачиванием в Django-приложение, работающее под Apache’ем
* приложение возвращает в Apache умный итератор, из которого файл выдается пользователю
* умный итератор умеет ограничивать скорость, придерживая выдачу кусочков файла
* умный итератор учитывает количество отданных байт, записывая его в БД
Сам сервер.
* для отдельных категорий пользователей скорость скачивания должна быть ограничена
* система должна быть в курсе, когда скачивание успешно завершено
Что такое Ruby on Rails