php基礎
基本語法形式
區(qū)分大小寫
- 主要是指變量名區(qū)分大小寫
- 常量通常也區(qū)分寒亥,但常量也可以自己設定為不區(qū)分(不推薦)
- 函數(shù)名不區(qū)分
- 系統(tǒng)中使用的關鍵字也不區(qū)分大小寫,比如if左胞, else担钮, for
語句結束符,用分號
- 一個php標記塊中的最后一個分號可省略
- php結束標記省略則不能省略最后一個分號
不建議省略厚棵!
變量
基本含義
變量是包含了一個名稱和一個值的“標識符”蕉世。
形式:變量必須以$開頭,后面緊跟變量名
//表示變量名$val 引用了數(shù)值1的地址
//當我們在代碼中使用$v1這個變量名窟感,就是指使用“1”這個數(shù)據(jù)值讨彼。
$va1 = 1;
注意:通常,在“能夠出現(xiàn)”變量的語法中柿祈,只要出現(xiàn)$符號哈误,并在其后出現(xiàn)緊挨著的字符,就會被識別為一個變量躏嚎,即使不存在該變量蜜自,
echo “人民幣符合¥像個羊,美元符號$象個錢”;//這里就會有問題卢佣!
變量的基本使用
-
定義變量(賦值):直接給變量賦值重荠,就是定義;
- 不支持js中的那種“定義但不賦值”的語法虚茶。
- 第一次給一個變量賦值戈鲁,就算定義變量。
-
取值:所有需要一個變量值的語句中嘹叫,就會取得該變量的值婆殿,常見包括
- 輸出:echo
$v1; //取得$v1的值,并輸出
- 給其他變量賦值
$v2 = $v1; //取得$v1的值罩扇,并賦值給$v2
- 參與運算:
$v3 = $v1 + 3; //取得$v1的值婆芦,并跟3相加
- 輸出:echo
-
判斷變量是否存在isset()
- 存在怕磨,就返回true,不存在就返回false
- 實際上消约,如果一個變量的值是null肠鲫,返回的也是false
-
修改變量值(賦值)
- 第二次及以后給一個變量賦值,就算修改變量值
刪除unset():就是斷開變量名跟數(shù)據(jù)之間的“引用關系”
命名規(guī)則
通常命名包括變量名或粮,函數(shù)名导饲,常量名,類名被啼,接口名帜消,等等
基本規(guī)則
- 只能使用大小寫字母,下劃線(_)浓体,數(shù)字
- 數(shù)字不能開頭
- 不能跟所在環(huán)境(系統(tǒng))的關鍵字重名(比如if泡挺, for, function...)
行業(yè)規(guī)則(潛規(guī)則)
基本規(guī)則命浴,保證的是語法的正確性娄猫。
行業(yè)規(guī)則,保證的是是否能得到別人的尊重生闲!
行業(yè)規(guī)則中媳溺,有如下幾種常用的命名規(guī)則:
- 駝峰命名法:
示例:name, myName碍讯, myFatherName - 帕斯卡命名法:
示例:Name沉噩, MyName黄伊, MyFatherName - 下劃線間隔法:
示例:name悲靴, my_ame马僻, my_father_name
變量間的傳值方式
- 這里討論的傳值方式是指:一個變量對另一個變量
- 它不僅僅適用于賦值語句,也適用于其他有同樣含義的語句倍啥,比如:函數(shù)的實參到形參
- 傳值方式只有2種:值傳遞禾乘,引用傳遞
- php中,所有變量虽缕,默認都是值傳遞始藕。
- 要想使用引用傳遞,必須使用引用傳遞的符號: &
值傳遞
是指將一個變量的數(shù)據(jù)值(數(shù)據(jù)內容)拷貝一份氮趋,然后賦值給另一個變量伍派。
$v1 = 1;
$v2 = $v1;//有值傳遞
$v3 = $v1 + 10;//無值傳遞
引用傳值
將一個變量的引用關系拷貝一份,然后賦值給另一個變量剩胁,即另一個變量也同樣由該關系決定了指向某個數(shù)據(jù)
$v10 = 10;
$v20 = &$v10;
賦值(傳值)完之后拙已,兩個變量指向同樣一個數(shù)據(jù)。則:對變量v10的操作摧冀,改變的數(shù)據(jù),也就是體現(xiàn)為v20也發(fā)生了改變。
$v10++;
echo $v20;//11
在這種引用傳值的情況下索昂,unset一個變量建车,則另一個跟它有關(指向同樣數(shù)據(jù)的關系)的變量,并不受影響椒惨。
unset($v20);
echo $v10;//11
echo $v20;//報錯缤至,提示Undefined
可變變量
所謂可變變量,就是一個變量的名康谆,又是一個變量领斥。
$v1 = “abc”; //這是一個字符串變量,其內容是字符串“abc”
$abc = 10; //這是一個普通變量沃暗,其內容是數(shù)字10
echo $$v1; //此時月洛,就是所謂“可變變量”
- 凡是$符號出現(xiàn),就會有可能理解為是一個變量
-
這里第一個“$”出現(xiàn)了孽锥,則php就視圖將其解釋為一個變量嚼黔,變量名是$v1
; - 我們有知道,$v1的值是”abc”惜辑,
- 那么唬涧,第一個“$”符號后面的變量名,就得到為“abc”
- 即:echo 試圖輸出的是變量$abc盛撑, 自然是數(shù)字10
即從最右邊的$符號開始看起$(&v1) => $abc => 10,理論上碎节,可變變量的嵌套還可以更多,比如:$$$def;
預定義變量
預定義變量又叫超全局變量抵卫,包括:$_GET, $_POST, $_SERVER, $_REQUEST, $GLOBALS, $_COOKIE, $_SESSION, ..........(大約10個)
- 作用域問題:php中狮荔,自定義的變量的作用域,分兩種:全局作用域(函數(shù)外)陌僵,局部作用域(函數(shù)內)轴合。但預定義變量的作用域稱為“超全局作用域”:全局作用域 + 局部作用域的總和(函數(shù)內外全都可用)
- 數(shù)據(jù)類型問題:超全局變量都是數(shù)組!
$_GET變量(數(shù)組)
$_GET這個預定義數(shù)組變量碗短,就是指以GET這種方式提交的所有數(shù)據(jù)的集合(數(shù)組),例如
形式一:
<form action=”abc.php” method=”get” >
項目1: <input type=”text” name=”uName” />
項目2: <input type=”password” name=”uPswd” />
<input type=”submit” value=”提交” />
</form>
其作用是:用戶填寫表單數(shù)據(jù)受葛,并提交后,會將數(shù)據(jù)發(fā)送(提交)給頁面abc.php偎谁,其實也可以理解為“打開”該網(wǎng)頁(abc.php)总滩,還可以理解為“請求”該網(wǎng)頁(abc.php)
形式二:
<a href=”abc.php?uName=test1&uPswd=123”>Get</a>
其作用是:用戶點擊鏈接后,會將數(shù)據(jù)發(fā)送(提交)給頁面abc.php巡雨,其實也可以理解為“打開”該網(wǎng)頁(abc.php)闰渔,還可以理解為“請求”該網(wǎng)頁(abc.php),這種請求也是get請求
形式三:
<script>
location.href = “abc.php?uName=test1&uPswd=123”; //利用location對象的屬性href
</script>
其作用是:當該行語句執(zhí)行的時候(通常其實是在函數(shù)中)铐望,會將數(shù)據(jù)發(fā)送(提交)給頁面abc.php冈涧,其實也可以理解為“打開”該網(wǎng)頁(abc.php)茂附,還可以理解為“請求”該網(wǎng)頁(abc.php),這種請求也是get請求
形式四:
<script>
location.assign( “abc.php?uName=test1&uPswd=123”); //利用location對象的方法assign()
</script>
其作用是:當該行語句執(zhí)行的時候(通常其實是在函數(shù)中)督弓,會將數(shù)據(jù)發(fā)送(提交)給頁面abc.php营曼,其實也可以理解為“打開”該網(wǎng)頁(abc.php),還可以理解為“請求”該網(wǎng)頁(abc.php)愚隧,這種請求也是get請求
不管哪種形式的get提交過來的數(shù)據(jù)蒂阱,獲取數(shù)據(jù)是一樣的:(在abc.php網(wǎng)頁中)
<?php
$v1 = $_GET[‘uName’]; //單引號也可以用雙引號,本質是一個字符串狂塘,其實是數(shù)組的鍵名(下標)
$v2 = $_GET[‘uPswd’]; //該鍵名必須跟提交的時候的名字完全一致(區(qū)分大小寫)
?>
下面例如輸出$_GET,首先是表單
<form action="get_1.php" method="get">
姓名:<input type="text" name="uName">
密碼:<input type="password" name="uPswd">
年齡:<input type="text" name="uAge">
<br>
愛好:
<input type="checkbox" name="uHobby[]" value="zuqiu" />足球
<input type="checkbox" name="uHobby[]" value="lanqiu" />籃球
<input type="checkbox" name="uHobby[]" value="yumaoqiu" />羽毛球
<br>
<input type="submit" value="提交">
</form>
php代碼
<?php
var_dump($_GET);
?>
最終輸出結果是
array(4) {
["uName"]=>
string(4) "Jens"
["uPswd"]=>
string(6) "123456"
["uAge"]=>
string(2) "21"
["uHobby"]=>
array(2) {
[0]=>
string(6) "lanqiu"
[1]=>
string(8) "yumaoqiu"
}
}
$_POST變量(數(shù)組)
類似$_GET變量(數(shù)組)录煤,$_POST代表頁面通過post方式提交過來的數(shù)據(jù)所形成的數(shù)組。
post提交數(shù)據(jù)荞胡,通常只有一種形式:
<form action=”abc.php” method=”post” >
項目1: <input type=”text” name=”uName” />
項目2: <input type=”password” name=”uPswd” />
<input type=”submit” value=”提交” />
</form>
其作用是:用戶填寫表單數(shù)據(jù)妈踊,并提交后,會將數(shù)據(jù)發(fā)送(提交)給頁面abc.php硝训,其實也可以理解為“打開”該網(wǎng)頁(abc.php)响委,還可以理解為“請求”該網(wǎng)頁(abc.php) 接收post數(shù)據(jù)的形式為:(在abc.php網(wǎng)頁中)
<?php
$v1 = $_POST[‘uName’]; //單引號也可以用雙引號,本質是一個字符串窖梁,其實是數(shù)組的鍵名(下標)
$v2 = $_POST[‘uPswd’]; //該鍵名必須跟提交的時候的名字完全一致(區(qū)分大小寫)
也可以顯示所有post數(shù)據(jù):
var_dump($_POST)
?>
通常赘风,網(wǎng)頁中的form表單,一般都用post方式纵刘,get方式主要體現(xiàn)在其他3種形式邀窃。
$_REQUEST變量(數(shù)組)
$_REQUEST數(shù)組,其實并不是一個獨立的數(shù)據(jù)來源假哎,而是$_POST數(shù)據(jù)和$_GET數(shù)據(jù)的“總和”即$_REQUEST數(shù)組中包括了所有$_POST數(shù)據(jù)和$_GET數(shù)據(jù)——其實是由系統(tǒng)內部自動存儲的瞬捕。通常,$_POST數(shù)據(jù)和$_GET數(shù)據(jù)不會“同時出現(xiàn)”舵抹,$_REQUEST數(shù)組就代表了其中之一肪虎。
無論表單的提交方法是GET或POST,其接收的方式都是
$u = $_REQUEST['XXX'];
而get和post數(shù)據(jù)同時提交的情形
<form action="abc.php?a=5&b=10" method="POST" > ...
項目1: <input type=”text” name=”uName” />
項目2: <input type=”password” name=”uPswd” />
<input type=”submit” value=”提交” />
</form>
則此時惧蛹,uName和uPswd兩個數(shù)據(jù)以post方式提交給abc.php,并扇救,同時:a=5和b=10兩個數(shù)據(jù),以get方式提交給abc.php
則在頁面abc.php中:
//這樣取得get數(shù)據(jù):
$v1 = $_GET[‘a(chǎn)’];
$v2 = $_GET[‘b’];
//這樣取得post數(shù)據(jù):
$v3 = $_POST[‘uName’];
$v4 = $_POST[‘uPswd’];
//但香嗓,也可以這樣妊盖弧(全有了):
$v1 = $_REQUEST[‘a(chǎn)’];
$v2 = $_REQUEST[‘b’];
$v3 = $_REQUEST[‘uName’]
$v4 = $_REQUEST[‘uPswd’]
當get數(shù)據(jù)和post數(shù)據(jù)同時提交并其中有重名的時候,情況怎么樣呢靠娱?
- 盡量避免重名沧烈;
- 如果重名了,此時$_REQUEST只會記錄(存儲)其中一個數(shù)據(jù)(要么post數(shù)據(jù)像云,要么get數(shù)據(jù))
- 至于記錄的是哪個锌雀,是有php.ini中的一個設置項來決定:
- request_order = “GP”; //這是默認值蚂夕,G代表GET,P代表POST腋逆。含義是:先存儲GET數(shù)據(jù)双抽,再存儲POST
- 如果重名,此時POST就會覆蓋GET數(shù)據(jù)闲礼,改為:request_order = “PG”, 順序反過來
$_GET, $_POST, $_REQUEST三種數(shù)據(jù)是相互獨立的铐维。
$_SERVER變量(數(shù)組)
該變量存儲了服務器端或客戶端的一些請求信息或設置信息柬泽,比較多,而且不同的服務器和不同的請求頁面嫁蛇,其數(shù)據(jù)項都可能不同锨并。
- 常用的有:
- REMOTE_ADDR, 用戶的IP地址
- SERVER_ADDR: 服務器端的IP地址
- SERVER_NAME: 服務器名(主機名)
- DOCUMENT_ROOT: 站點絕對路徑(其實就是主機設置中的DocumentRoot
- PHP_SELF:當前網(wǎng)頁的文件路徑
- QUERY_STRING: 表示一個get請求的整體字符串,類似這樣:
- http://www.abc.com/abc.php?a=5&b=10連接地址中的“a=5&b=10” 輸出所有項(可能每臺服務器有所差異)
輸出所有項的代碼
<?php
foreach ($_SERVER as $key => $value) {
echo $key . " ==> " . $value;
}
?>
$GLOBALS變量(數(shù)組)
似乎是一個多余的變量:它只是把我們自己定義的所有全局變量存儲到該數(shù)組中:變量名就是該數(shù)組的下標(鍵名)睬棚,變量值就是對應的值第煮。例如
<?php
$va1 = 1;
$va2 = "jehe";
var_dump($GLOBALS);
?>
則輸出的結果為
array(7) {
["GLOBALS"]=>
*RECURSION*
["_POST"]=>
array(0) {
}
["_GET"]=>
array(0) {
}
["_COOKIE"]=>
array(0) {
}
["_FILES"]=>
array(0) {
}
["va1"]=>
int(1)
["va2"]=>
string(4) "jehe"
}
常量
含義:用于存儲一個不會變化也不希望變化的數(shù)據(jù)的標示符。
常量命名規(guī)則抑党,同變量包警,但習慣說,常常將常量的名稱使用“全大寫”形式底靠。
定義形式
使用define()函數(shù)定義
- 使用形式:define(“常量名”害晦, 常量值),推薦常用名使用全大寫形式
例如
define("PI",3.14);
echo PI;// 3.14
使用const語法定義
- 使用形式: const 常量名 = 常量值;
- 但const語法只能在“最頂層”的代碼域中使用(不能在大括號中)暑中,也即壹瘟,const語法不能在函數(shù)中或條件語句中或其他表示一個“范圍”的語句中使用
例如
const PI = 3.14;
if(PI > 10){
const PW = 5;// 錯誤,只能定義在最頂部
}
使用常量
- 直接使用名字
- 使用constant()函數(shù):constant(“常量名”)
例如
<?php
define("PI",3.14);
echo(3.14);
echo(constant("PI"));
?>
常量變量的區(qū)別
- 定義形式不同:常量無需$符號
- 使用形式不同:常量無需$符號
- 可變程度不同:常量的值不可以改變鳄逾,常量也不可以銷毀
- 作用范圍不同:常量具有超全局作用域 (函數(shù)內外都可以直接使用)
- 可用類型不同:常量只能存儲標量類型:int稻轨,float,string雕凹,bool
判斷常量是否存在
判斷的結果為布爾值殴俱。
常用形式:if ( defined (某常量名) == false ){ .....這里可以去定義該常量;}
實際上请琳,可以這樣:
$result = defined (某常量名); //結果是true或false
使用一個未定義的常量(特殊情況)
使用一個未定義的常量會報一個錯誤(notice錯誤)——跟使用一個未定義的變量一樣——當然不推薦粱挡。但是:php,此時會得到一個意想不到的結果:似乎該常量存在俄精,并該常量的值就是該名字询筏。
預定義常量
php語言中,預定了大量的常量竖慧,可以直接使用嫌套。其中有些常量逆屡,是需要某些模塊打開之后才有(比如mysql模塊)
- 比如M_PI(圓周率), PHP_OS(操作系統(tǒng)), PHP_VERSION(php版本號),PHP_INT_MAX(php中的最大的整數(shù)值)
- 參考手冊〉附錄〉保留字列表〉預定義常量
魔術常量
魔術常量其實是一種值會隨著一定的條件(環(huán)境)而變化的常量踱讨,形式和使用上是常量魏蔗,但實際上,其值會改變痹筛。
比如:__DIR__(當前網(wǎng)頁文件的所在目錄)莺治,__FILE__(當前網(wǎng)頁文件),__LINE__(當前這一行)
- 魔術常量其實類似變量帚稠,其值隨著不同代碼而變化谣旁,不區(qū)分大小寫
- 參考手冊〉語言參考〉常量〉魔術常量
例如:
<?php
echo __DIR__;
echo "<br />";
echo __FILE__;
echo "<br />";
echo __LINE__;
?>
輸出結果為
D:\PHP\demo2
D:\PHP\demo2\get_1.php
6