
流程.png
基礎(chǔ)
- PHP 語言的標(biāo)記。
- 標(biāo)準(zhǔn)形式:
<?php
...當(dāng) php 代碼后面沒有 html 標(biāo)簽,可以省略掉結(jié)束標(biāo)簽 ?>。
?>
- 標(biāo)準(zhǔn)形式:
<script language="php">
...代碼片段
</script>
- 短標(biāo)簽:
<?
...(不推薦)
這種方式依賴 php.ini 中的一項設(shè)置:short_open_tag = on
?>
- 書寫規(guī)則。
- 語句結(jié)束符,分號:
php 標(biāo)記中最后一個分號可省略;
php 結(jié)束標(biāo)記 ?> 省略的情況下,最后一個分號不可省略; - 區(qū)分大小寫:
| 類型 | 大小寫 |
|---|---|
| 變量 | 區(qū)分 |
| 常量 | - 通常情況下區(qū)分 |
| - 可設(shè)定為不區(qū)分(不推薦) | |
| 函數(shù) | 不區(qū)分 |
| 關(guān)鍵字 | 不區(qū)分 |
變量
- 常規(guī)變量。
- 聲明變量:必須以 $ 開頭,其后是變量的名稱。
$name //√
1. 變量名:必須以字母或下劃線開頭。$name $_name //√
2. 變量名:不能以數(shù)字開頭。$123 //×
3. 變量名:只能包含字母數(shù)字字符和下劃線。A-z 0-9 _
4. 大小寫敏感。$y != $Y
5. 在代碼中,只要出現(xiàn) $ 符號,就會被識別為變量:
echo "¥人名幣,$美元"; //$美元 會被識別為變量!
? PHP 中變量賦初值就是定義變量,不支持 JS 中定義但不賦值的語法。 - 命名規(guī)則:
1. 駝峰命名法:name, myName, myFatherName
2. 帕斯卡命名法:Name, MyName, MyFatherName
3. 下劃線間隔法:name, my_name, my_father_name - 傳值方式:值傳遞、引用傳遞。
1. 傳值的方式不僅適用變量,同樣適用于同等含義的語句:函數(shù)的參數(shù)。
2. 默認(rèn)為值傳遞,使用引用傳遞的時,需要引用符號:&。 - 操作變量。
- 判斷:通過 isset() 函數(shù)判斷變量是否存在。
1. 存在:返回 true,不存在:返回 false。
2. 變量值為 null 時,也會返回 false。 - 刪除:通過 unset() 函數(shù)銷毀定義的變量。
unset() 的運(yùn)行機(jī)制是斷開變量名與內(nèi)存中變量數(shù)據(jù)之間的關(guān)聯(lián),并將內(nèi)存中的變量交還給內(nèi)置的內(nèi)存維護(hù)列表中。 - 特殊變量。
- 可變變量:指變量的嵌套,這是 php 中特殊的語法,在其他語言中很少見。
$a= "abc"; //普通變量
$abc= 10; //普通變量
echo $$a; //可變變量 可等同理解為 echo $a $abc
- 預(yù)定義變量:又稱為超全局變量。
$_GET, $_POST, $_SERVER, $_REQUEST, $_GLOBALS, $_COOKIE, $_SESSION.... - 作用域:
- 局部作用域:只能在所定義的函數(shù)范圍內(nèi)使用。
- 全局作用域:在函數(shù)的“外部”范圍使用。
- 超全局作用域:就是在函數(shù)的內(nèi)部和外部都可以使用。
- 靜態(tài)局部作用域:比局部作用域多一個特征,數(shù)據(jù)能夠在函數(shù)退出后仍然保持不丟失。
注——PHP中,局部和全局作用域是不重疊的。
注——JS中,全局作用域包含局部作用域。
預(yù)定義變量
- $_GET 變量(數(shù)組):用于收集來自 method="get" 的表單中的值。
- 頁面提交:
<form action="demo.php" method="get">
Name: <input type="text" name="name" />
Password: <input type="password" name="pass" />
<input type="submit" value="提交" />
</form>
<!-- 點(diǎn)擊提交后,收集表單的數(shù)據(jù)發(fā)送給 demo.php -->
- 鏈接提交:
<a href="demo.php?name=boss&pass=123456"> sometext </a>
<!-- 點(diǎn)擊 <a> 鏈接后,跳轉(zhuǎn)到該頁面并將數(shù)據(jù)以 url 形式傳遞 -->
- 屬性方法:
<script>
some.onclick=function(){
location.href="demo.php?name=boss&pass=123456"
}
</script>
- 函數(shù)方法:
<script>
some.onclick=function(){
location.assign("demo.php?name=boss&pass=123456")
}
</script>
- 以上幾種方法提交過來的數(shù)據(jù)是一樣的。
<?php
$userName=$_GET['name']; //指數(shù)組的下標(biāo)
$userPass=$_GET['pass']; //鍵名必須與提交的名稱一致(區(qū)分大小寫)
?>
- 綜合示例:HTML 部分。
<form action="demo.php" method="get">
用戶名:<input type="text" name="name" />
密 碼:<input type="number" name="age" />
愛 好:<input type="checkbox" name="hobby[]" value="足球"/>足球
<input type="checkbox" name="hobby[]" value="籃球"/>籃球
<input type="checkbox" name="hobby[]" value="排球"/>排球
<input type="submit" value="提交" />
</form>
<hr/>
<a href="demo.php?name=帥哥&pass=999">點(diǎn)擊跳轉(zhuǎn)</a>
<hr/>
<div id="one" style="width:100px;height:100px;background: teal;"
onclick="one()">location.href</div>
<div id="two" style="width:100px;height:100px;background: blanchedalmond;"
onclick="two()">location.assign</div>
<script>
function one(){
location.href="demo.php?name=美女&pass=666";
}
function two(){
location.assign("demo.php?name=ASS&pass=2012");
}
</script>
<!-- 上述 HTML 代碼中,對于多個愛好使用了二維數(shù)組。 -->
PHP 代碼:
<?php
$userName=$_GET['name'];
$userPass=$_GET['pass'];
echo "$userName,$userPass";
echo "<hr/>";
echo "<pre>";
var_dump($_GET);
echo "</pre>";
//使用 var_dump 可以完整的打印 $_GET。
?>
- $_POST 變量(數(shù)組):類似 $_GET,詳細(xì)的區(qū)別可以查看 這里。
post 只能通過表單提交數(shù)據(jù):
<form action="demo.php" method="post">
<input type="text" name="n1" />
<select name="sun">
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>
<input type="text" name="n2" />
<input type="submit" value="提交" />
</form>
<!-- 點(diǎn)擊提交后,收集表單的數(shù)據(jù)發(fā)送給 demo.php -->
PHP 代碼:
<?php
if($_POST{ //判斷打開方式
$num1=$_POST['n1'];
$num2=$_POST['n2'];
$sun=$_POST['sun'];
if( is_numeric($num1) && is_numeric($num2)){ //判斷是否為數(shù)值
switch($sun){
case "+":
$result=$num1+$num2;
break;
case "-":
$result=$num1-$num2;
break;
case "*":
$result=$num1*$num2;
break;
case "/":
if($num2==0){
$result="除數(shù)不能為 0。";
}else{
$result=round($num1/$num2,2);
break;
}
}
}else{
$result="請輸入數(shù)字。";
}
echo $result;
}else{
echo "請使用正確的打開方式。"
}
?>
- $_REQUEST 變量(數(shù)組):包含了 $_GET、$_POST,可以獲取兩種數(shù)據(jù)來源。
HTML 代碼:
<form action="test.php?a=998&age=10" method="post">
<input type="text" name="name"/>
<input type="text" name="age"/>
<input type="submit" value="提交"/>
</form>
PHP 代碼:
<?php
var_dump($_POST);
//array(2) { ["name"]=> string(2) "11" ["age"]=> string(2) "22" }
echo '<hr/>';
var_dump($_GET);
//array(2) { ["a"]=> string(3) "998" ["age"]=> string(2) "10" }
echo '<hr/>';
var_dump($_REQUEST);
//array(3) { ["a"]=> string(3) "998" ["age"]=> string(3) "22"
//["name"]=> string(3) "11" }
?>
- $_REQUEST 可以同時接受兩種數(shù)據(jù),但是同名的數(shù)據(jù)會被覆蓋掉:
age。
默認(rèn)的存儲順序是 1.GET 2.POST,代表同名情況下 GET 會被覆蓋。
可以在 php.ini 配置文件中修改順序:request_order = "GP";//默認(rèn) - $_SERVER 變量(數(shù)組):存儲了服務(wù)器 or 客戶端的一些請求、設(shè)置信息。
| 參數(shù) | 描述 |
|---|---|
| argv | 傳遞給該腳本的參數(shù) |
| argc | 包含傳遞給程序的命令行參數(shù)的個數(shù)(如果運(yùn)行在命令行模式) |
| DOCUMENT_ROOT | 網(wǎng)站根目錄(apche httpd.conf 中的 DocumentRoot) |
| GATEWAY_INTERFACE | 服務(wù)器使用的 CGI 規(guī)范的版本。例如,“CGI/1.1” |
| HTTP_ACCEPT | 當(dāng)前請求的 Accept: 頭部的內(nèi)容 |
| HTTP_ACCEPT_CHARSET | 當(dāng)前請求的 Accept-Charset: 頭部的內(nèi)容,例如:“iso-8859-1,*,utf-8” |
| HTTP_ACCEPT_ENCODING | 當(dāng)前請求的 Accept-Encoding: 頭部的內(nèi)容,例如:“gzip” |
| HTTP_ACCEPT_LANGUAGE | 當(dāng)前請求的 Accept-Language: 頭部的內(nèi)容,例如:“en” |
| HTTP_CONNECTION | 當(dāng)前請求的 Connection: 頭部的內(nèi)容,例如:“Keep-Alive” |
| HTTP_HOST | 當(dāng)前請求的 Host: 頭部的內(nèi)容 |
| HTTP_REFERER | 鏈接到當(dāng)前頁面的前一頁面的 URL 地址 |
| HTTP_USER_AGENT | 當(dāng)前請求的 User-Agent: 頭部的內(nèi)容 |
| HTTPS | 如果通過https訪問,則被設(shè)為一個非空的值(on),否則返回off |
| PHP_SELF | 當(dāng)前網(wǎng)頁的文件路徑 |
| PATH_TRANSLATED | 當(dāng)前 腳本所在文件系統(tǒng)(不是文檔根目錄)的基本路徑 |
| QUERY_STRING | get 請求地址:http://www.abc.com/abc.php?a=10 中的 a=10 這段字符串 |
| REMOTE_ADDR | 用戶的 IP 地址 |
| REMOTE_HOST | 用戶的主機(jī)名 |
| REMOTE_POST | 用戶連接到服務(wù)器時所使用的端口 |
| REQUEST_METHOD | 訪問頁面時的請求方法,例如:“GET”、“HEAD”,“POST”,“PUT” |
| REQUEST_URI | 訪問此頁面所需的 URI。例如,“/index.html” |
| SCRIPT_NAME | 包含當(dāng)前 腳本的路徑。這在頁面需要指向自己時非常有用 |
| SCRIPT_FILENAME | 當(dāng)前執(zhí)行 腳本的 絕對路徑名 |
| SERVER_ADMIN | 管理員信息 |
| SERVER_ADDR | 服務(wù)器 IP 地址 |
| SERVER_NAME | 服務(wù)器的主機(jī)名 |
| SERVER_SOFTWARE | 服務(wù)器標(biāo)識的字串,在響應(yīng)請求時的頭部中給出 |
| SERVER_PROTOCOL | 請求頁面時通信協(xié)議的名稱和版本,例如,“HTTP/1.0” |
| SERVER_PORT | 服務(wù)器所使用的端口 |
| SERVER_SIGNATURE | 包含服務(wù)器版本和 虛擬主機(jī)名的字符串 |
打印 $_SERVER:
<?php
echo "<style>td{padding:3px;}</style>";
echo "<table border='1'cellspacing='0' cellpadding='0'>";
foreach($_SERVER as $key => $value){
echo "<tr>";
echo "<td>$key</td>";
echo "<td>$value</td>";
echo "</tr>";
};
echo "</table>";
?>
- $GLOBALS 變量(數(shù)組): 所有的全局變量都儲存在 $GLOBALS 中。
<?php
$v1=1;
$v2=2;
echo "123";
function abc(){
$v3=3;
$v4=4;
}
abc();
echo '<pre>';
var_dump($GLOBALS);
echo '</pre>';
?>
//輸出結(jié)果如下:
/*array(8) {
["_GET"]=> array(0) {}
["_POST"]=> array(0) {}
["_COOKIE"]=> array(1) {
["ext_type"]=> string(1) "1" }
........
重點(diǎn)如下:
["GLOBALS"]=>
*RECURSION*
["v1"]=> int(1)
["v2"]=> int(2)
}*/
常量
- 常量類似變量,但是常量一旦被定義就無法更改或撤銷定義。
- 常量以字符或下劃線開頭。
- 與變量不同,常量貫穿整個腳本自動全局。
- 定義形式:
- define() 函數(shù) :
define(常量名,常量值,大小寫 bool 值);
推薦常量名使用大寫形式;
<?php
define('CONST110',111);
define('_C2',"AAA");
define('pi',3.14); //小寫,不推薦
//調(diào)用常量
echo CONST110; //111
$title="<h3>"._C2."</h3>";
$arc=pi*5*5;
echo "<hr />";
echo $title; //AAA
echo "<hr />";
echo $arc; //75
?>
- const 語法:
const 常量名 = 常量值;
const 只能在 "最頂層" 的代碼中使用(即:不能在 {} 中使用);
<?php
const C1=998;
echo C1; //998
if(C1>1){
const C2=110; //error
}
echo constant("C1"); //998
$s1="C1";
echo constant($s1); //998
?>
- 常量和變量的區(qū)別:
- 常量不需要 $ 符號聲明;
- 常量值不可更改或銷毀;
- 常量自帶超全局作用域;
- 常量只能存儲標(biāo)量類型(int、float、string、bool);
- 通過 defined() 函數(shù)判斷是否為常量。
if(defined(常量)){ dosometing.... }
//或者
$flag=defined(常量); //true false
特殊常量
預(yù)定義常量。
PHP 中定義了大量的常量,可直接調(diào)用;其中有些常量需要打開指定模塊后才可以使用,(例如:mysql 模塊)。舉例:
M_PI(圓周率) PHP_OS(操作系統(tǒng)) PHP_VERSION(版本號) PHP_INI_MAX(正無窮)詳細(xì)可參見 目錄。
魔術(shù)常量。
魔術(shù)常量是一種可以在不同條件環(huán)境下反映不同值的常量。比如:
__DIR__(當(dāng)前文件所在目錄)、__FILE__(當(dāng)前文件)、__LINE__(當(dāng)前行)
<?php
echo "當(dāng)前文件目錄:".__DIR__; //X:\phpStudy\WWW\php
echo "<br/>";
echo "當(dāng)前文件:".__FILE__; //X:\phpStudy\WWW\php\demo.php
echo "<br/>";
echo "當(dāng)前代碼所在行:".__LINE__; //6
echo "<br/>";
echo "當(dāng)前代碼所在行:".__LINE__; //8
echo "<br/>";
?>