今天寫代碼的時候發現自己代碼的一處錯誤:
$m_category->Insert($data);
我調用了$m_category對象的insert方法,奇怪的是,我自己編寫的框架裡insert方法名是小寫的,但是我這裡調用的首字母大寫了(公司的框架Model類的方法均為首字母大寫,有時候習慣了回家寫代碼不容易寫錯)。
但是很奇怪的是,這段代碼在之前的測試是通過的,並沒有報錯或什麼,數據也正常寫入了,有些思不得解,於是嘗試做了一個實驗。
就從控制器開始吧,我當前控制器中有一個方法是addWiki,那麼我新增一個方法addwiki,然後等待了一下,IDE沒有為我這個新的方法報錯。松了一口氣,看來PHP對大小寫是敏感的。然後我嘗試調用addwiki這個方法,這時候讓我驚訝的事情發生了:PHP向我拋出了一個致命錯誤:addwiki無法被重定義。看樣子PHP對方法名的大小寫還是不敏感呀。
還是不死心,也許是我PHP配置的問題,於是上網查找之,找到了不少資料,原來PHP對類名和方法名是大小寫不敏感的。
下面抄一些別處的資料,區分PHP大小寫敏感的地方。
1. 變量名區分大小寫
2. 常量名默認區分大小寫
3. 函數名、方法名、類名不區分大小寫
4. 魔術常量不區分大小寫,推薦大寫
5. NULL、TRUE、FALSE不區分大小寫
除了變量名和常量名區分大小寫以外,其他統統不區分。不過在我們正常的使用中,都有常量名、魔術變量使用大寫的習慣,而NULL、TRUE、FALSE在不少框架中也被推薦使用大寫(雖然我自己喜歡用小寫),因此問題也不大。據說常量名可以設置為大小寫敏感,不過沒去查找這方面資料,也不清楚了,當然還是按照約定來使用大寫吧。
重點就在於類、方法、函數名這一點上,好吧,我一直認為類和方法名是大小寫敏感的,至今才知道:-(
不過建議還是注意大小寫的好,畢竟PHP不知哪天哪個版本就改掉了這條特性,不再支持大小寫不敏感的函數、方法名了
為了讓各位更深入了解php中大小寫我們整理了一些例子
一、大小寫敏感
1. 變量名區分大小寫
所有變量均區分大小寫,包括普通變量以以及$_GET, $_POST, $_REQUEST, $_COOKIE, $_SESSION, $GLOBALS, $_SERVER, $_FILES, $_ENV等;
<?php
$abc = 'abcd';
echo $abc; //輸出 'abcd'
echo $aBc; //無輸出
echo $ABC; //無輸出
2. 常量名默認區分大小寫,通常都寫為大寫
(但沒找到能改變這個默認的配置項,求解)
1 <?php
define("ABC","Hello World");
echo ABC; //輸出 Hello World
echo abc; //輸出 abc
3. php.ini配置項指令區分大小寫
如 file_uploads = 1 不能寫成 File_uploads = 1
二、大小寫不敏感
4. 函數名、方法名、類名 不區分大小寫,但推薦使用與定義時相同的名字
<?php
function show(){
echo "Hello World";
}
show(); //輸出 Hello World 推薦寫法
SHOW(); //輸出 Hello World
<?php
class cls{
static function func(){
echo "hello world";
}
}
Cls::FunC(); //輸出hello world
5. 魔術常量不區分大小寫,推薦大寫
包括:__LINE__、__FILE__、__DIR__、__FUNCTION__、__CLASS__、__METHOD__、__NAMESPACE__。
<?php
echo __line__; //輸出 2
echo __LINE__; //輸出 3
6. NULL、TRUE、FALSE不區分大小寫
<?php
$a = null;
$b = NULL;
$c = true;
$d = TRUE;
$e = false;
$f = FALSE;
var_dump($a == $b); //輸出 boolean true
var_dump($c == $d); //輸出 boolean true
var_dump($e == $f); //輸出 boolean true
7.類型強制轉換,不區分大小寫,包括:
* (int),(integer) – 轉換成整型
* (bool),(boolean) – 轉換成布爾型
* (float),(double),(real) – 轉換成浮點型
* (string) – 轉換成字符串
* (array) – 轉換成數組
* (object) – 轉換成對象
<?php
$a=1;
var_dump($a); //輸出 int 1
$b=(STRING)$a;
var_dump($b); //輸出string '1' (length=1)
$c=(string)$a;
var_dump($c); //輸出string '1' (length=1)