Въпреки че съм почитател на ПХП от доста отдавна и имам голям, ако не огромен опит с него, ще се опитам да бъда обективен и да отговоря в стила в който Найден си е задал въпроса. Не да флейма.
1. Bad recursion
Recursion is the mechanism in which a function calls itself. This is a powerful feature which can make something complex something simple. An example of a function using recursion is quicksort. Unfortunately, PHP is not good at recursion. Zeev, one or the developers of PHP, says this: "PHP 4.0 (Zend) uses the stack for intensive data, rather than using the heap. That means that its tolerance recursive functions is significantly lower than that of other languages." See bug 1901. This is a poor excuse. Every programming language should provide good recursion support.
Това е така. Дори и в ПХП5 е така
2. Many PHP-modules are not thread safe
Това беше така в ПХП3, но от 4.3 насам се промениха много нещата. В 5 вече нещата не са такива каквито бяха и това е една от основните причини от несъвместимостта между 4 и 5. Т.е. ако си си писал добре на 4 ще ти върви и на 5, ако ли не.. ще пренаписваш
3. PHP is crippled for commercial reasons
The performance of PHP can be increased to 500% by using caching [benchmarks]. So why is caching not build into PHP? Because Zend, the maker of PHP is selling its own Zend Accelerator and of course, they don't want to cannibalize on there own commercial products.
Това също е така, от тази гледна точка. Разбира се акселератора е безплатен, а не се продава както пише. Общо взето тип - разбрал-недоразбрал
4. No namespaces
Suppose someone creates a PHP-module that can read files. One of the functions in this module is called read. And someone else's module can read web pages and also contains a function read. Then it is impossible to use these modules together because PHP will not know which read function you want.
В C също няма namespaces, в Perl също. В PHP6 най вероятно ще има и в PHP. Проблема най-вероятно се състоеше в ужасната поддръжка на обекти в 4 и липсата на такава в 3 и по стари. Затова пък всяка от стандартните библиотеки си ползва някакъв префикс. Едва ли е толкова сложно. Ако искаш mysql ще пишеш mysql_connect, ако искаш MS Server, mssql_connect. Не е сложно да се чете.
7. Inconsequent function naming convention
Some function names consist of more than one word. There are three conventions for combining these words:
1. Glued together: getnumberoffiles
2. Separated with underscores: get_number_of_files
3. Camel case: getNumberOfFiles
Most Languages choose one of these variants. PHP uses all of them.
"Това е и така и не е така" както казваше един колега. Факт е че най-старите имплементирани функции са слети, тези от 4 са с подчертавки а тези от 5 са с камили. Обачи в 95% от случаите тези които са слети имат еквивалент в тези с подчертавки а в тези с камили също има еквивалент на тези с подчертавки. Пазят се с главна цел съвместимост, а защо се добавят нови.. еми най-вероятно еволюцията на езика.. както в Java и Java2, поне нещо в този вид.
10. No Unicode
With Unicode it is possible to use every language in the world, for example Chinese, Arabic and Hebrew. While every other serious programming language supports Unicode for many years, PHP still has a very hard time dealing with this. Unicode is planned for PHP 6, so we still have to wait a long time before PHP supports this trivial feature.
Така е въпреки че използвайки iconv функциите, се постига нещо подобно, обаче изисква допълнителни умения и усилия.
11. Slow
You think Java is slow? PHP is much slower! See this Computer Language Shootout. Normally that's not a big issue, because most PHP-scripts only pull data from the database and render it in HTML, a very simple job and fast enough for page views. So how can PHP be used on all these popular websites with lots of visitors? Because of caching. These sites use MCache and APC to get performance. It doesn't proof anything about PHP, only that it's cachable.
Абсолютно не е вярно. ПХП е достатъчно бързо, дори не знам защо се опитват да го сравняват с Java. А това че може да се кешира, и е добре да се кешира за да се изстиска още повече производителност е съвсем друг въпрос.
Conclusion
For very small projects, it can be a nice programming language. But for larger and more complex projects, PHP can show its weakness. When you search long enough, you'll find solutions to some of the mentioned problems. So when a solution is known, why isn't it fixed? And why are the fixes not mentioned in the manual?
ПХП става и за големи проекти. Не само за най-малките както все се опитват да го изкарат. Може в версия 2 да е било така, но по времето на версия 2 други езици като Java2, Python и Ruby въобще ги е нямало. Работил съм и по наистина големи проекти с сравнително добър успех. Горе долу със същия с който бих работил и с .NET или с Java примерно. Зависи кой как си е свикнал. Аз си знам PHP, знам как да си правя кода достатъчно добър за да се харесва на интерпретатора и нямам проблеми. Вие знаете някой друг език - това е достатъчно, стига да ви върши работа използвайте го. Ако не ви върши работа, научете го по добре.
Мисля че бях достатъчно изчерпателен с което се надявам наистина да затворим темата.