PHP & Case Sensitivity
PhpCase SensitiveCase InsensitivePhp Problem Overview
In PHP, variable and constant names are case sensitive, while function names are not.
As far as I am aware, PHP is the only language in which this happens. All other languages I have used are either totally case sensitive or totally case insensitive.
Why is PHP partially case senstive?
Please note, that I am not asking which names are case sensitive, but why.
Update
I thought I might add, for the benefit of those who think I am asking which, the following list:
Case Sensitive
- Strings
- Variables
- Object Properties
- Constants, by default
Case Insensitive
- Key Words etc
- Functions
- Object Methods
- Constants, if defined accordingly
- Class Names
Note:
- Classes are thus a mixed bag:
- The
class
keyword is case insensitive - Class names are case insensitive, for declaration, instantiation, and static calls
- Class methods, being functions, are case insensitive
- Class properties, being variables & constants, are case sensitive
- The
- Because Strings are case sensitive, anything that relies on strings, such as array keys and values, is also case sensitive
Php Solutions
Solution 1 - Php
FYI
Case sensitive (both user-defined and PHP defined)
- variables
- constants
- array keys
- class properties
- class constants
Case insensitive (both user defined and PHP defined)
- functions
- class constructors
- class methods
- keywords and constructs (if, else, null, foreach, echo etc.)
In php.net
Basics
Variables in PHP are represented by a dollar sign followed by the name of the variable. The variable name is case-sensitive.
Variable names follow the same rules as other labels in PHP. A valid variable name starts with a letter or underscores, followed by any number of letters, numbers, or underscores. As a regular expression, it would be expressed thus: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
Some useful Links
Solution 2 - Php
> Why is PHP partially case senstive?
I can only speculate that this stems from very early versions, probably PHP/FI 2.0. The manual explicitely states:
> Keep in mind that PHP/FI function names are not case sensitive.
Most user input, such as GET and POST parameters, has always been registered as global variables, back then. Treating these as case insensitive would likely have caused issues, and supposedly therefore all variables have been treated as being case sensitive.
From what I can tell these have been the only kinds of identifiers in PHP/FI 2.0. All others have been introduced later, apparently mimicking the case-insensitive function names.
Constants, which are special, have only been introduced as of PHP 4 (the PHP 3 manual mentions "constants", but these are nowadays referred to as "literals"). For some mysterious reason (maybe no consensus could be found), it had been decided to allow constant identifiers to be define()
d either case sensitive or insensitive on the developers discression. Interestingly, while define()
defaults to case sensitive constants, the respective C counterparts (REGISTER_*_CONSTANT
) default to case insensitive.
Solution 3 - Php
Case sensitive
> variables, constants, array keys, class properties, class constants
Case insensitive
> functions, class constructors, class methods, keywords and constructs > (if, else, null, foreach, echo etc.)