PHP is a language that's become popular for web apps. Some of PHP's notable non-features include:

  • No Namespaces: PHP doesn't have a concept of namespace, which means it's got a load of functions in "core", and addon packages have to be careful not to step on each other.
  • No anonymous functions: Well, not really, anyway. There's create_function but it works at runtime rather than compile-time, which leads to problems.
  • Wonky arrays: PHP's array type tries to combine arrays and hashes, but it isn't very good at either. There are a dozen variants of the array functions differing only in how they combine "numbered" and "associative" elements.
  • Wonky references: PHP doesn't have references, despite the documentation. It has a way to make aliases in the symbol table, and a (buggy) version of pass-by-reference, but it doesn't have first-class references.
  • Database inconsistencies: The standard set of database functions doesn't just provide a completely different interface for each database engine; it's also designed to encourage SQL injection-type security holes
  • False security: The misnamed "magic quotes" are supposed to be a magic bullet against injection attacks, but what they really do is corrupt data and introduce incompatibilities between servers. And they don't even protect from the most interesting attacks
  • Strapped-on OO PHP certainly isn't the only language guilty of having OO added as an afterthought, but it's got to be the worst. Take a look at the PHP annotated manual if you want to get an idea of the problems is has with binding time, derived classes not working as expected, and much more :)