What I don't like: The standard library has grown organically and without much top-down design, leaving it with too many inconsistent names/APIs, gaps and overlaps in functionality. Object-oriented programming took hold relatively late in PHP's history, so it's not used consistently in the standard library and elsewhere. The language itself has too many non-obvious pitfalls, e.g. ways that array/map indices work, and the way that type errors and type coercion are handled. Support for programming-in-the-large (e.g. first-class modules or packages) is poor. Historical convention of mixing logic and markup means it now requires extra discipline to separate them. The language doesn't seem to be evolving toward any particular vision, and it's not really flexible enough that users can evolve the language themselves (ala Ruby or Lisp).
I've worked pretty happily with PHP applications, and seen a lot of good code written in PHP. But it's not my tool of choice for new projects, for the reasons above.
PHP's standard library is extremely disorganized. What's the function to put a string into hexadecimal? bin2hex. What's the function to put a string into base64? base64_encode. How do you turn a base64 string back into a "binary" string? base64_decode. How do you turn a hexadecimal string back into a "binary" string? Oh wait... an explicit function doesn't exist for that. Not to mention the various inconsistent ways in which functions are named: afnctn(), afunction(), a_function(), et cetera ad nauseum. Many functions also have an inconsistent order of parameters.
PHP doesn't support integral values larger than that of a signed 32 bit integer. Even better, when you overflow an int, you get a float back! Did you know pack() and unpack() support arguments for the unsigned ints that PHP doesn't support? Genius!
Last I checked, PHP didn't use lexical scoping. Do you know how downright stupid and annoying that is?
PHP's thread support sucks. Period.
According to Cal Henderson at Flickr, PHP "leaks memory like a sieve." (http://www.afup.org/IMG/pdf/flickr_php.pdf) (of course this is an implementation issue)
The downright stupidity of some of the PHP users just baffles me at times. One look on the PHP manual (Especially at any of the pages about the cryptographic functions, such as md5() and sha1() ) is enough to make any seasoned programmer's blood pressure skyrocket.
Cheers.
The dislike comes mostly from purists and language evangelists who think the language is what makes a good programme.
I started programming ages ago. From Fortran, Cobol, Algol moved to Pascal (the greatest ever), went to C and the rest of them.
PHP has a lot of heritage that I object like sometimes function names are either full name or c-like. I bypassed them by wrapping a couple of functions and presto!
I love it because it allows me to very quickly build stuff but I hate the inconsistencies that make it almost a requirement to visit php.net all the time.
And then there's a bunch of very ugly bits and pieces that now have to be supported forever due to backwards compatibilty. Strpos anyone ?