PHP-變數(三)(區域性變數、全域性變數、超全域性變數)
1. 變數的劃分
JS 中 變數分兩類:區域性變數 和 全域性變數。
PHP 中 變數分三類:區域性變數、全域性變數、超全域性變數
2. 區域性變數
在函式內部宣告的變數,就是區域性變數,當函式執行完畢,區域性變數就消失了。區域性變數,只能在函式內部使用。
// 定義函式abc
function abc() {
// 在函式內部宣告變數:區域性變數
$a = 100;
}
驗證區域性變數不能在函式外使用,如下圖
3. 全域性變數
在函式外部宣告的變數,就是全域性變數。在 PHP 中,全域性變數,在函式中不能使用,網頁執行完畢,全域性變數消失。
// 在函式外部宣告的變數:全域性變數
$b = 200;
// 定義函式abc
function abc() {
// 在函式內部宣告變數:區域性變數
$a = 100;
}
驗證全域性變數不能在函式內部使用,如下圖
4. 超全域性變數(也叫超全域性陣列變數)
是系統定義的變數,就是超全域性變數。該變數可以在任何地方直接使用。
4.1 超全域性變數有哪些?
超全域性變數 | 描述 |
---|---|
$_GET |
主要用來獲取 HTTP GET方式傳遞的資料。 |
$_POST |
主要用來獲取 HTTP POST方式傳遞的資料。 |
$_REQUEST |
主要用來獲取 GET 和 POST 方式傳遞的資料,但是速度相對較慢。 |
$_SERVER |
主要用來獲取伺服器執行環境的相關資訊。 |
$GLOBALS |
主要包含 |
$_SESSION |
主要獲取伺服器端的會話資訊。 |
$_COOKIE |
主要獲取客戶端的會話資訊。 |
$_FILES |
主要獲取上傳檔案的相關資訊。 |
$ENV |
獲取環境資訊。(不常用) |
4.2 $_POST
主要用來獲取 HTTP POST 方式傳遞到伺服器的資料
特點:
① 相對安全,資料不在位址列顯示
② 可以傳送任何型別的資料
③ 對資料大小沒有限制
以$_POST為例,實現簡單的表單提交,伺服器端顯示獲取到的資料
<?php
/*
* 客戶端程式碼
*/
// 驗證表單資訊是否匹配, 匹配就獲取裡面的資料
if(isset($_POST['ac']) && $_POST['ac'] == 'login') {
// 獲取表單提交資料
$username = $_POST['username'];
$password = $_POST['password'];
echo "使用者名稱:$username, 密碼:$password";
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
</head>
<body>
<form action="./index.php" name="form1" method="post" >
<table>
<tr>
<td>使用者名稱:</td>
<td><input type="text" name="username" placeholder="請輸入使用者名稱"></td>
</tr>
<tr>
<td>密碼:</td>
<td><input type="password" name="password" placeholder="請輸入密碼"></td>
</tr>
<tr>
<td><input type="submit" value="提交"></td>
<!--隱藏域,用於表單驗證-->
<td><input type="hidden" name="ac" value="login"></td>
</tr>
</table>
</form>
</body>
</html>
<?php
/*
* 服務端程式碼
*/
// 驗證表單資訊是否匹配, 匹配就獲取裡面的資料
if(isset($_POST['ac']) && $_POST['ac'] == 'login') {
// 獲取表單提交資料
$username = $_POST['username'];
$password = $_POST['password'];
echo "使用者名稱:$username<br>密碼:$password";
}
?>
/**
* 實現了簡單的表單驗證
* 要使用我的例項程式碼,需要滿足以下條件
* ① 開啟Apache伺服器
* ② 設定域名 www.phpdemo1.com
* ③ 保證index.php 和 server.php 在根目錄下
*/
4.3 $_GET
用來獲取 HTTP GET 方式傳送到伺服器的資料。
特點:
① 所有的資料都會顯示在位址列,不安全
② 只能傳送少量的資料。
③ 只能傳送字串型別的資料。
注意:通過位址列傳送的請求都是GET請求
那麼,我如果想要同時傳送GET 和 POST 請求該怎麼辦呢?
在上例的基礎上稍作改動
4.4 $_REQUEST
REQUEST包含了 _GET、POST、 _COOKIE 陣列的內容雖然$_REQUEST 可以獲取 GET 或 POST 提交的資料,但速度表較慢。
4.5 $_SERVER
$_SERVER 可以獲取服務端執行環境的相關資訊。