Я, смотрю, сегодня тема популярная

Давайте я вам расскажу, по мере сил, как чувак кодивший на том и на том
Как нетрудно догадаться, вопрос нужна правильно формулировать так "А для чего Java лучше?". И, аналогично, "для чего лучше PHP?".
В принципе, преимущества PHP сложнее объяснить на словах, так как они менее очевидны, и тем не менее значительны в своей области.
PHP рулит для быстрого создания веб-приложений малой и средней сложности.
Преимущества PHP:
- В отстутствии явной компиляции (на яве она отнимает значительное время отладки)
- В нестрогой динамической типизации (когда нужно быстро разобрать пользовательский HTTP-ввод, без лишних телодвижений).
- Ассоциативные хеш-массивы - в яве для того, чтобы вернуть из метода нескалярный результат, как правило, приходится создавать отдельный класс, что не всегда удобно, если не предполагается его повторное использование в иных местах.
- В мощной стандартной библиотеке языка, реализованной на Си. В яве, чтобы например получить строку MD5 от другой строки, приходится вставлять с десяток строк кода.
Функции реализованные на Си сами по себе обладают высокой производительностью, сопоставимой с Java. Кроме того, в отличие от различных фреймворков, расширяющими возможности стандартных либ, которыми приходится пользоваться в Java, эти функции известны всем PHP-программистам, а это повышает читабельность кода проекта.
- Возможность мешать код с выдачей. В яве для этого нужно юзать сервлет-контейнер с поддержкой JSP.
- Банально поддержка multiline strings (строк с переносом строк

) В яве приходится делать так, что бесит:
PHP:
String x = "bla-" +
+ "bla";
- Высокая интегрированность с HTTP. В Java, к примеру, невозможно передать тот же ассоциативный массив как параметр POST. Так же, невозможно передать двойной (тройной) вложенный массив ($_POST['arr_A']['arr_B'])) Для этого нужно как минимум пользовать один из веб-фреймворков. Каждый из которых делает это по-разному.
Возможно, я что-то упустил и вспомню позже.
Преимущества Java:
- Строгая типизация. Если мы считаем, например денежные суммы (как правило целочисленно, в копейках), то мы не должны внезапно для себя получать дробный результат. Для приложений с глубоким стеком вызова (когда сложные алгоритмы для одного, например, HTTP-запроса, когда в значительном вызывают различные методы, один вызывает другой и так далее), нестрогая типизация резко повышает вероятность того, что false полученный в результате ошибки будет воспринят как 0, или там где будет ожидаться для сравнения 1 мы получим 0.9999999... , которое не пройдет проверку на равенство. Это вызывает необходимость регулярной ручной проверки типа, что не страхует от ошибок невнимательности.
- Java требует в разы (даже на порядок) меньше памяти, чем PHP для хранения сложных объектных структур. В PHP на 64ех-битной платформе, по моим замерам, простое присвоение $x = 0; жрёт порядка 136 байт (!!). При этом память явно выделяется с запасом, т.к. присвоение $y = "test string" сожрёт дополнительно ещё тех же 136 байт.
В Java 1 ссылка на объект ест 16 байт, а примитивные типы столько, сколько нужно минимально для хранения информации, например integer - 4 байта, long - 8 байт.
Соответственно, создать в Java 100.000 объектов много дешевле, чем в PHP.
- Многопоточность. В Java другая модель взаимодействия с HTTP. Если PHP работает через вариции CGI или являясь модулем Cи-шного вебсервера, то веб-приложения на Java являются модулем веб-серверов (так называемых сервлет-контейнеров) на Java же. (Tomcat, Jetty, Glassfish и иже с ними). В Java для обработки запроса создаются так назваемые сервлеты - объекты классов специального формата, которые инициируются веб-сервером (точнее сервлет-контейнером) и далее для обработки каждого отдельного HTTP-запроса создается лишь отдельный поток, вызывающий метод этого сервлета. Поток это thread, не отдельный процесс, как в PHP, а возможность запускать параллельную выполнение методов в рамках одного процесса.
На практике это означает, что мы можем один раз инициализировать какую-нибудь тяжелую структуру, навроде огромного массива или объектного графа, а потом получать к нему доступ при каждом новом HTTP-запросе, без необходимости каждый раз проводить его инициализацию. Правда, такой подход приводит к проблемам горизонтального масштабирования (на разные машины).
- Производительность. Скорость работы Java сопоставима с C, особенно при многократных повторных вызовах тех же участках кода - вступает в силу JIT-компилятор, переводящий байт-код в машинные команды.
- Кроссплатформенность. Java более кроссплатформенна, чем PHP, как ни странно. Например, размер int здесь не зависит от платформы.
- Огромное количество фреймворков и библиотек рассчитанных на создание бизнес-приложений. Ни в одном другом языке нет такого разнообразия.
- Чуть более развитые ООП возможности. Несколько более богатая классовая модель - вложенные, анонимные классы, енумы и тп.
Резюмируя:
Java хороша для бизнес-приложений, работы с финансами, тяжелых вычислений.
PHP хорош для быстрой и безгеморойной разработки сайтов с богатыми веб-интерфейсами, но без тяжелой логики.