PHP и с чем его едят....

GrAndSE

Тёмный
Модератор
dreamer, похоливарили и будет, я с тобой согласен, помогает не хвататься за голову и дебагер после релиза. =)

Cris, AkeL.php не туда вы смотрите (конспекты старых пердунов из Политеха?), 21 век на дворе, эра серверов с десятками гигабайтов ram для memcached, а вы все экономите на байтах между float и double. Ну есть в Java, если не строгая, то статическая типизация. И толку? Apache + Tomcat + JSP будет в десятки раз медленнее Apache + PHP через FastCGI. И это не только мое мнение и опыт, введите в Google "php jsp benchmark" и получите с 10 ссылок с тестами.

Вот к примеру:


Если с защитой программиста от скрытой ошибки я еще могу согласиться, то c приростом производительности - это смешно. По сути интерпретатор PHP выполняет точно такие же действия, как и JVM, за единственным отличием: в первом случае определение типа и работа с ним осуществляется автоматически (хотя сам Zend Engine написан на С++ со статической типизацией, достаточно заглянуть в мануал по Zend API и написанию модулей для php), во втором она должна быть описана вручную. А результат то один.
Lighttpd + fastcgi (который в php далеко не , хотя и лечиться установкой чего-нить типа eAccelerator) ощутимо проигрывает Apache + Tomcat + JSP на таком мощном приложении как hello world. От полутора до двух раз. Думаю, что дальше дело пойдет ещё круче, так как например скорость вызова метода в java уже версии 1.4 была выше аналогичной у C++ (приведу в пример ). Что-то мне слабо верится, что php порвёт java в этом. Не думаю, что Вы будуте спорить с тем, что ООП для более-менее серьёзных проектов очень необходим, а скорость php при его использовании заметно уменьшается.
Плюс ко всему ещё в том, что если некоторое время поработать с тем же Tomcat можно заметить, что сервер нужно перезапускать при внесении изменений в "не jsp" - все классы и библиотеки кешируются в памяти в уже готовом к исполнению виде. Т.е. то, для чего и существуют всяческие eAccelerator'ы для php.
Чем плоха типизация? В java у меня не вызывает никаких проблем необходимость создавать функции поддерживающие несколько наборов параметров - просто использую перегрузку методов незадумываясь.. Компилятор за меня подумает, а с теми ли я параметрами вызываю этотм метод. Уверены, что на php удобней будет реализовать такую гипотетическую конктрукцию: экзмепляр класса Василий (Vasiliy) принимает в пищу (tryToEat()), только мясо (Meat), некоторые овощи (поддерживающие интерфейс FreshAndSweet) и рюмочку для аппетита, но только чего-то подороже и красненького (interface GoodRedWine), но только с масям и перед употреблением пищи. Естественно, куаждое из вышеперечисленных блюд он есть по разному..
Код:
public class Vasiliy {
    public void eat(Meat food) {}
    public void eat(FreshAndSweet vegetable) {}
    public void eat(GoodRedWine wine, Meat food) {}
}
Напишите пожалуйста сей код на php. Короче ли он будет? Понятней и логичней?
 
Код:
public class Vasiliy {
    public void eat(Meat food) {}
    public void eat(FreshAndSweet vegetable) {}
    public void eat(GoodRedWine wine, Meat food) {}
}
Напишите пожалуйста сей код на php. Короче ли он будет? Понятней и логичней?
PHP:
class Vasiliy {
  function eat ($what) {
    switch ($what->gettype())
    {
      case 'Meat': ... break;
      case 'Vegetable': ... break;
      case 'Wine': return $what->getWhiteOrRed (); break;
      default: 'I don\'t eat this shit';
    }
  }
}
при этом каждый $what это abstract class food с необходимыми методами получения типа, расчета калорийности и т.д.

О вкусах не спорят, но ничего непонятного и нелогичного я в этом не вижу.
конечно public void eat(GoodRedWine wine, Meat food) {} это удобно, но ничего не мешает вызвать метод eat объекта Василий 2 раза.
Vasiliy->eat (RedWine:getInstance()) и Vasiliy->eat (Meat:getInstance()), если в абстрактный класс food добавить синглетон паттерн. Все красиво, все понятно =)


PainKiller, ну ты уже взрослый мальчик, а на провокации реагируешь как предменструальная школьница - выплеснул все знания из головы. Флейм ведь совсем не об этом, а о пользе и вреде типизации. Я конечно не совсем Java программист, но мне хватает статьи из , где черным по белому писано "Неявное преобразование типов не допускается".
Единственный практически используемый язык программирования со строгой типизацией — это Ада. Довольно большое число распространённых языков программирования используют нестрогую статическую типизацию. К таким языкам относятся, например Pascal, Modula-2, Java. В них обязательно описание типов переменных, параметров и функций, но допускается неявное приведение типов — в случае, если значение одного типа присваивается переменной другого, то компилятор автоматически генерирует код для преобразования значения в нужный тип, если только такое преобразование не приводит к потере данных. Так, например, целое число можно присваивать переменной, объявленной как число с плавающей точкой, а обратное присваиваение без явного приведения типов запрещено, поскольку с высокой вероятностью приведёт к ошибке.
и в той же википедии в статье про джаву есть раздел "Преобразования примитивных типов при математических операциях", где показан следующий пример
short x = 50, y = 1000;
int z = x*y;
Так о какой строгой типизации идет речь, когда компилятор сам преобразовывает short в int?

Хочешь крупные приложения на PHP - смотри в сторону фейсбука, вконтакта, википедии, digg, фликра и кучи других. И работают же. А какие крупные проекты работают на Java с подобным трафиком? У меня в голове сразу всплывает разве что Приват24, который постоянно светится эксепшенами и частенько лежит по часу-другому, хотя у него нет и сотой части нагрузки вышеперечисленных сайтов. Все зависит от программистов, а не от языка.
 
Останнє редагування:

daoway

кот Шрёдингера
Хочешь крупные приложения на PHP - смотри в сторону фейсбука, вконтакта, википедии, digg, фликра и кучи других. И работают же. А какие крупные проекты работают на Java с подобным трафиком? У меня в голове сразу всплывает
Да уж... много букоф, но это я без внимания не оставлю. Как насчёт Linkedin, FeedBurner и eBay ? Может ещё что то там есть, хз. Вот , рекомендую ознакомицца !

Ну плюс ко всему, впечатления одного бородатого дядьки по поводу
JAVA или PHP???

исходные данные:
у вас одинаково подготовленная команда
как для JAVA так и для PHP уровень их мастерства в обоих языках равен


первое наезд на PHP, реальный! из жизни. PHP от версии к версии не переносятся на 100%. Поведение скриптов меняется от версии к версии. Такие переходы как 4.3.0 на более старшую версию, переход на 5.0, переход на 5.2.0, переход на 5.2.5
скрипты одни и те же ведут по-разном!!!
я вообще не говорю о том что в php.ini в разных версиях PHP разные OOB (out-of-box settings) что тоже влияет на их работу.
Если у вас дедик, под рутом то все вроде ок, если шаред хостинг, все ПРИЕХАЛИ, вероятность того что насторойки php у разных хостеров разные!!!
Прикольно? НЕТ!!

я был ОЧЕНЬ удивлен когда ознал что коммерчески развиваемый продукт на PHP имеет очень сильный набор функциональных тестов для Continues Integration. Я тогда не понял зачем им тестировать OOB для Linux разных вендоров и версий. Сейчас это уже очевидно, чтобы саппорт не утонул в количестве реквестов и тикетов.

Второй момент PHP - это скрипт, у него нет типизации какая есть у JAVA.
Java сделал refaсtoring скампилил и спи спокойно.
PHP - это вешалка, не проиницилизированная переменная - это нормуль, сравнение строки и целого числа, то же прокатит. Навигация по коду в IDE опять же затрудненая, нет типизации, я пишу об этом моменте потому как в крупном проекте без этого жить ох как сложно!

Акцент ставим здесь: time to market, приложение с исходным текстом в 2-3 мега можно выкатить на рынок быстрее, если оно написано на Java, а не на PHP. И проблем при саппорте меньше. Вы наверное знаете про регрессию? если приложение усложняется в два раза, то ресурсы необходимые на успешное завершение проекта растут гиперболически (у разных проектов этот коеффицент разный), например два. Т.е. если проект усл. в два раза, то проект тянуть становиться в 4 раза сложнее.

Теперь рассмотрим старт проекта и сравним Java и PHP
PHP разрабатывается ыункционал на 30% дольше, чем JAVA. ЭТО мой личный опыт. Так вот так гибербола о которой я писал выше, потянеться в верх быстрее чем у JAVA. Итого по моим прикидкам сложность проекта на PHP увеличит нагрузку на проект на в 4 раза, а 4 * 1.3 * 1.3 = 6.76

если кто-то не понял о чем я, лучше пропустите, когда возросшие расходы на PHP проект ударят по корману - перечитайте. Читай что сложный проект на PHP - это дорого!


Когда нужно использовать JAVA:
- ваша компания ориетирована на корпоратиного заказчика (это очевидно)
- у вас большой проект, читай приложение, IMHO более 3mb SRC
- вас есть достойные сотрудники, но их мало.
-если приложение на постоянно меняется, и присутствует сильная сцепленность функционала, опять лучше JAVA

PHP
-маленькие приложения, разрабатываемые компанией
-у вас куча народа, кто-то может что-то подписать где ему хочется, много народа смотрят в код, испольняют его, проверяют функионал, постоянно (нагрузка на QA огромна)
-ориентация на мелких заказчиков, конечный пользователь обычно Webmaster или маленькая, редко средняя контора.
-тучи, прочто тучи хостингов могут запускать PHP, Java - это уже dedicated server
-скрипт не о чем, типа нужно - сел написал (приложения до 3 мб в SRC)
 

FEOFAN

http://feofan.com
Последние посты смахивают на жаркий спор маленьких детей в песочнице о том, у чего папы пиписька больше, быстрее и мощнее.
 

daoway

кот Шрёдингера
Последние посты смахивают на жаркий спор маленьких детей в песочнице о том, у чего папы пиписька больше, быстрее и мощнее.
Ну на то он и холивар :) Вообщето крокодил больше длинный, чем зелёный, потому что длинный он и сверху и снизу, а зелёный только сверху ! :)
 
Да уж... много букоф, но это я без внимания не оставлю. Как насчёт Linkedin, FeedBurner и eBay ? Может ещё что то там есть, хз. Вот , рекомендую ознакомицца !
Ну я же не говорил, что их совсем нету =)
Не знал, что eBay на java работает. До сих пор встречаются ссылки остатков C++ ISAPI и т.п.

FEOFAN, у меня сейчас очень сложный этап в жизни - переходной возраст, вот и самоутверждаюсь на форуме.


А вообще, зачем этот спор, даже brainfuck является тьюринг полным языком, теоретически на нем можно и ОС написать или еще какой-то язык программирования, а потом в этом новом языке программирования еще одну ОС написать со своим языком программирования. Каждый дрочит как хочет: кто-то по трушному, всей пятерней со статической типизацией и классическим ООП, а кто-то украдкой, двумя пальцами на PHP, где до 5.3 версии и неймспейсов (OMFG!!!) то небыло. А результат то все равно один и в браузере выглядит совершенно одинаково, если мы про подweb говорим.
 
Останнє редагування:

GrAndSE

Тёмный
Модератор
Vasiliy->eat (RedWine:getInstance()) и Vasiliy->eat (Meat:getInstance()), если в абстрактный класс food добавить синглетон паттерн. Все красиво, все понятно =)
Ну при употреблении винца с мясцом эффект будет не суммарный от употребления вина и мяса. :) Ну да ладно то мелочи.
Окромя того, возникает резонный вопрос, как предложеная схема (особенно первая) будет работать при наличии не просто классов, а интерфесов (как я писал я и писал изначально). Тогда первый предложенный вариант превращается в массу if ($operand instanceof InterfaceName) и теряет всякую читабельность. О варианте с синглтоном думать дуже после дня в универе как-то совсем лень.
Дело личное, но мне приятней использовать перегрузку.
Хочешь крупные приложения на PHP - смотри в сторону фейсбука, вконтакта, википедии, digg, фликра и кучи других. И работают же. А какие крупные проекты работают на Java с подобным трафиком? У меня в голове сразу всплывает разве что Приват24, который постоянно светится эксепшенами и частенько лежит по часу-другому, хотя у него нет и сотой части нагрузки вышеперечисленных сайтов. Все зависит от программистов, а не от языка.
Facebook что только не используютю По-моему у них некоторые сервисы даже на erlang есть.. Тут должен разгореться холивар по поводу императивного и процедурного подходов к написанию ПО, споры по поводу распаралеливания и т.д. :)
А вообще, взять ту же довольно известную в Сумах компанию NetCracker: разработка систем учета всего подряд для крупных компаний, типа мобильных операторов. Тоже весьма немаленькая нагрузка.
На сколько мне известно в Google используються преемущественно java и python. Думаю, что о маленькой нагрузке на систему говорить не приходиться.

Как по мне, до определённого уровня целиком хватит php. Зачастую не нужны никакие перегрузки, анонимные классы, дополнительная уйма проверок и т.д.. Но на каком-то этапе дополнительные символы на обьявления типов перекрываются ухищрениями для этой же проверки типов, переносимости кода, универсальности, расширяемости и т.д..
 

GrAndSE

Тёмный
Модератор
А куда ж без холиваров? Нужно хоть о чем-то поговорить, повыстаскивать из заначек забавные штучки из любимых средств.. Всеж веселее, чем читать отчоты о деятельности "прохаваных програмеров", у которых простейшая програмулина на два-три часа работы вызывает ступор.
 

Cris

Member
может уже надо создавать темуки типа "типизация хорошо vs плохо))" или там php vs ....
 

dreamer

Member
И я! И я хочу похоливарить :) Отличная возможность померяться... ээ носами! :)
daoway: спасибо за цитатку, толково мужик написал, согласен с ним.
Vladimir Smirnoff: Если я не ошибаюсь сейчас еще и Ruby обладает полной статической типизацией.
Но мы отошли от темы холивара :) не отвлекаемся, господа!
В общем тут та же ситуация, что и с перлом – излишек свободы приводит к сложностям с поддержкой кода.
Так что нельзя сказать что строгая типизация это хорошо или плохо. Если пишешь небольшой проект логично выбрать инструмент, дающий больше свободы. И наоборот, если коллектив работает над проектом, который необходимо поддерживать и развивать – лучше пользоваться более формальными инструментами и использовать общие соглашения разного рода.
 
Зверху