So what, exactly, limits PHP in terms of writing large web apps?
I've found PHP quite acceptable for writing medium to large intranet sites with lots of database access, and very easy for writing the front end stuff, like pushing database data into a page in a certain format.
I've seen a few sites written in both, and the common thread in the JSP sites is keeping the thing up. A farm with 3 JSP servers will have to have JSP reset on at least one every day. Prophylactic restarts don't seem to help, i.e. it's not a problem with the JSP site being up and hit hard and long, it seems random in nature when the backend decides to stop answering.
PHP almost never hangs a server, although some problems can result in single processes that are hung, and need the server reset with a 'killall -1 httpd', these are predictable and can be fixed with standard workarounds.
As for being a REAL programmer, I started in 1978 on my gf's dad's 12k ELFII computer, and have been programming ever since. I've programmed in machine code, hex, Basic (it was the only working language we had on a Burroughs B28 back when), Reverse Polish LISP, Pascal, Modula 2, C, C++, Perl, and PHP. I've only programmed enough in Java to realize I'd rather use apache modules or FastCGI than Java because of performance and memory use issues.
Don't get me wrong, I like OO coding, when OO coding is the answer. But so often it is not the answer, and it seems like with Java it is the way things are done, period.
With Deltas of <1 Meg for PHP and C++ as a module in apache, and >16 Megs for Java, real scalability issues start to surface under load. If you're writing a web app that handles 3,000 concurrent users, PHP and C modules can handle that on one or two beige boxes running Linux. Cost ~$10,000 to $30,000.
For Java you're looking at many more boxes due to the memory needs of all those JSP threads. Porfile the server usage of memory under JSP to see for yourself. Watch your 1 Gigabyte dual PIII 1GHz box run out of memory at around 100 users with JSP, and PHP/C++ run out of I/O long before they do memory. i.e. with a module or some other efficient method, you're looking at adding I/O bandwidth before CPU or memory. With JSP you're running out of both
CPU and memory long before you've exceeded the bandwidth of the box you're on.
I've run into many fairly large interactive sites lately written in PHP.
Lastly, I'll leave you with a tale I heard one of the primary PHP authors himself tell a couple years back...
He had been hired by IBM to make their JSP server run faster. He wrote a simple page that hit a database and grabbed a random row out of 100,000 or so, built a page and displayed it.
He ran a load tester against it and got around 7 or 8 pages a second, and promptly spent the rest of the afternoon trying to figure out why it was so slow.
He showed the results to the JSP developers at IBM, who told him that that was pretty good actually.
For fun, he put PHP on the same box running JSP, and rewrote his code to do exactly the same thing in PHP. Result: ~500 page views a second.
This was on a Dual Xeon box hitting a Quad Xeon box for a database.
After much careful tuning and bug patching, the JSP box got up to around 12 page views a second.
Good language or no, I've never seen a JSP app run fast under heavy parallel load without massive hardware behind it, and nowadays, with the economy in the dumper, you can't afford to put a site online that needs $100,000 worth of hardware to run reliably just because you like the language.
He was