PHP is full of surprises and quirks. Some can be useful if carefully exploited, but some aren’t. Attached is a short list of some of my greatest issues with PHP.

phpIssues.pdf

Inconsistent function naming convention.

Some functions consist of two or more words. How they are pieced together is awfully variable. One function is named htmlentities, its reverse is html_decode_entities. Sometimes they just string the words together, other times they separate them by underscores. Furthermore, as if just to complete the chaos, function names are case insensitive. myFunction equals to myfunction.

Magic quotes.

So called magic quotes were implemented to further security and prevent vulnerabilities, such as those of SQL injects. For some unknown (to me, anyway) reason, this functionality can be toggled on and off in the PHP configuration file. This results in complications for developers, as they must ensure the state of magic quotes suits their applications.

Unicode support.

Lack of Unicode support is more like it, actually. Unicode brings developers the ease of developing multi-lingual and national applications, without having to deal with the hassle of character set and locale conversions.

Licenses.

PHP is free software, no doubt. Therefore, one will undoubtedly assume its modules are so, too. Think again, because that is not the case. Some of the existing PHP modules are free software, but some are truly commercial. Thus, one must be really careful to read and comprehend each module’s license before one installs it. This may be the case with individual software applications, but with modules to existing ones? That’s just queer.

Date formatting.

I admit it; I’m an addict to C (the programming language, mind). The date formatting characters in PHP do not adhere to the UNIX or C standards, unlike most others. In fact, they are as incompatible as one could imagine. While „%j„ in C means the current year, „j„ in PHP means the current month. Of course, this is the case of the function date(). strftime(), however, supports the more common standards of UNIX/C. Why, is beyond my understanding.