1.含義與定義形式
就是使用一個“標記符號”(標識符)硫痰,來代表某個數(shù)據(jù)猛遍。
通常學到的是,變量代表存儲空間以及其中數(shù)據(jù)的一個“標識符”腻窒。
變量名 指向 變量值,更深入的說是 變量指向內存的一塊區(qū)域磅崭。
類比:
- 用一張車牌號代表某輛車辙纬。
- 用一個身份證號碼袜茧,代表某個人。
用一個變量,就可以理解為“使用一個數(shù)據(jù)”盯腌。
既然是變量,就是該數(shù)據(jù)時可以改變的一種數(shù)據(jù)女器。
對應常量:就是一種不可以(不允許)改變的數(shù)據(jù)诀蓉。
//定義形式
$變量名 = 值;
列如:$v1 = 3
這個等號(=)不是數(shù)學上等于的意思癣漆,這里的等號是賦值的意思维咸,這里本質是將數(shù)據(jù)3放到變量v1中去
演示代碼如下:
變量從另一個角度理解:
變量是一個“容器”惠爽,是一個“盒子”癌蓖,是一個可以存放數(shù)據(jù)的位置——內存空間。
也可以這樣去理解:
內存(條)中分割出很多很多的小格子疆股,每個格子都有一個編號地址(所謂內存地址)费坊。
其中存儲了數(shù)據(jù)的格子上有一定的標記名(變量名),并存放了對應的數(shù)據(jù)旬痹。
圖示如下:
對應代碼如下:
$A = 200;
$B = 300
其中附井,“0xA01”讨越,“0xA02”代表內存地址。內存地址其實是我們看不到的永毅,由系統(tǒng)分配把跨。
2.變量的命名規(guī)則
2.1.基本規(guī)則
1.構成:字母、數(shù)字沼死、下劃線着逐;
2.開頭:字母或下劃線;
3.注意:變量名不要跟系統(tǒng)中的“關鍵字”(即語法所用單詞)重復
2.2.行業(yè)規(guī)則
通常意蛀,盡量將變量命名為“見名知意”耸别。
盡量用更容易理解的單詞(或拼音)去表示一個數(shù)據(jù),很多時候可以使用“多個單詞(拼音)”县钥。
比如:
ChildAge, YungerAge, ParentHouse, MyParentHouse, MyParentHousePrice
此時秀姐,通常有兩個行業(yè)中的慣例規(guī)則:
駱駝命名法(小駝峰命名法):第一個單詞首字母小寫,其余單詞首字母大寫若贮。
childAge, yungerAge, parentHouse, myParentHouse, myParentHousePrice
帕斯卡命名法(大駝峰命名法):所有單詞都首字母大寫省有。
ChildAge, YungerAge, ParentHouse, MyParentHouse, MyParentHousePrice
3.變量的4種基本操作
任何一個變量,有且只有4種對變量的“操作”
3.1賦值——常見操作將一個數(shù)據(jù)(值)放入一個變量中谴麦。
$name = "張無忌";
幾乎所有變量要想后續(xù)正常使用蠢沿,第一件事就是“賦值”。
變量初始賦值后匾效,可以后續(xù)再去重新賦值——這就是修改了變量的值舷蟀,比如:
$name = “張無不忌”;
變量賦值的本質是:將變量名,跟一個數(shù)據(jù)“建立關聯(lián)(聯(lián)系)”弧轧,圖示如下:
此時雪侥,對該變量的操作,也就是對該內存地址上的數(shù)據(jù)的操作
3.2取值——常見操作
取值精绎,就是速缨,從變量這個容器中拿到其中存儲的數(shù)據(jù)(值);
取值無處不在:凡是使用到變量代乃,并在該位置上旬牲,需要一個“數(shù)據(jù)”的時候,就會發(fā)生取值操作
3.3判斷變量isset()
就是判斷一個“變量名”是否里面存儲了數(shù)據(jù)搁吓!
判斷的結果是:true(真原茅,表示有),或者false(假堕仔,表示沒有)擂橘。
使用這個語法來判斷:isset( $變量名 );
還有一個特殊的賦值,賦值后摩骨,變量中也沒有數(shù)據(jù)通贞,如下:
$v5=null; //null是一個特殊的“數(shù)據(jù)”(值)朗若,該數(shù)據(jù)的含義是:沒有數(shù)據(jù)。即此時判斷isset(v5)的結果是"false"昌罩。
3.4刪除/銷毀變量unset()
當一個變量中存儲了數(shù)據(jù)哭懈,我們也可以去銷毀(刪除)它,語法如下:
unset( $變量名 )茎用。
刪除變量的本質是:斷開變量名跟其關聯(lián)過的那個數(shù)據(jù)之間的“聯(lián)系”遣总,圖示如下:
此時,該變量就不再指向某個數(shù)據(jù)了轨功,其isset()判斷的結果為false
4.變量值傳遞
4.1含義
是指旭斥,將一個變量的值“傳遞”給另一個變量的方式問題。
形式上古涧,就是一個變量在等號左邊琉预,一個變量在等號右邊,就表示將右邊變量的值傳給左邊的變量蒿褂。
有且只有兩種傳數(shù)據(jù)的方式:值傳遞,和引用傳遞
4.2值傳遞
就是將右邊變量的“數(shù)據(jù)值”本身卒暂,復制一份啄栓,然后賦值給左邊變量。
形式如下:
$變量1 = $變量2;
舉列:
$v1 =1;
$v2 = $v1;
可見:
值傳遞之后也祠,兩個變量互不影響昙楚,相互獨立,沒有關系了诈嘿!
其原理如下所示:
可以看到堪旧,此時兩個變量在賦值之后,就相互獨立奖亚,各自有自己的存放空間淳梦。改變一個,另一個不受影響昔字。
實列演示如下:
實列代碼如下:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<?php
//值傳遞演示
$v1 = 1;
$v2 = $v1;
//$v3 = $v1 + 10;//注意: 這種不叫值傳遞
echo "<br>v2為:",$v2;//1;
$v1 =2; //改變v1的值為2
echo "<br>v2為:",$v2;//1;
$v1 = 3; //再次改變v1的值
echo "<br>v2為:",$v2;//1;
?>
</body>
</html>
值傳遞總結
1.在傳值的那個時刻爆袍,兩個變量的值是一樣的。
2.在值傳遞完成以后作郭,兩個變量之間沒有任何關系陨囊。
4.3引用傳遞
是將右邊變量對數(shù)據(jù)的引用關系,傳給左邊的變量夹攒。
圖示如下:
實列演示如下:
實列代碼如下:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<?php
//引用傳遞演示
$v1 = 1;
$v2 = &$v1;//賦值時加一個引用符號"&"
echo "<br>v2為:",$v2;//1;
$v1 =2; //改變v1的值為2
echo "<br>v2為:",$v2;//2;
$v2 = 3; //改變v2的值為3
echo "<br>v1為:",$v1;//3;
?>
</body>
</html>
引用傳遞總結
1.在引用傳值的時刻兩個變量的值一樣;
2.在之后蜘醋,兩個變量的值也是一樣,改變任何一個另外一個也會跟著改變咏尝。
5.預定義變量
在PHP語言內部压语,有一些(大概10多個)變量啸罢,是現(xiàn)成的,直接可以使用无蜂,這就是所謂預定義變量伺糠。
我們要做的是事情就是:理解該變量是什么意思,以及怎么用斥季!
5.1$_GET變量
代表瀏覽器表單通過“get”方式提交的所有數(shù)據(jù)(集)训桶,可以稱為“get數(shù)據(jù)”。
也可以理解為:
$_GET變量里面會“自動存儲”(保存/裝載)提交到某個文件中的GET數(shù)據(jù)酣倾。
而GET數(shù)據(jù)舵揭,是在一個頁面以“get”方式請求的時候提交的數(shù)據(jù)
代碼演示
制作一個表單,有兩個輸入框躁锡,可以輸出數(shù)字午绳,并提交。
到另一個頁面(文件)中映之,計算這兩個數(shù)字的和拦焚!
代碼如下:
1.get_form.php
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form action="get_data.php" method="get">
<input type="text" name="username" >
<br>
<input type="text" name="age" >
<br>
<input type="submit" value="提交">
</form>
<?php
?>
</body>
</html>
2.get_data.php
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<?php
$username = $_GET['username'];
$age = $_GET['age'];
echo "<br>姓名為:",$username;
echo "<br>年齡為:",$age;
?>
</body>
</html>
5,2$_POST變量
代表瀏覽器表單通過“post”方式提交的所有數(shù)據(jù)(集),可以稱為“POST數(shù)據(jù)”杠输。
也可以理解為:
$_POST變量里面會“自動存儲”(保存/裝載)提交到某個文件中的POST數(shù)據(jù)赎败。
而POST數(shù)據(jù),是在一個表單中以“post”方式提交的數(shù)據(jù)
代碼演示
有個表單蠢甲,兩個輸入框僵刮,可以填寫數(shù)字,有一個“提交按鈕”鹦牛,點擊計算搞糕,可以計算他們的乘積并輸出
代碼如下:
1.post_form.php
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h1>輸入兩個數(shù)字并計算相乘的結果</h1>
<form action="post_data.php" method="post">
<input type="text" name="num1" >
<br>
<input type="text" name="num2" >
<br>
<input type="submit" value="計算">
</form>
</body>
</html>
2.post_data.php
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<?php
$num1 = $_POST['num1'];
$num2 = $_POST['num2'];
$result = $num1 * $num2;
echo "<br>num1和num2相乘的結果為:",$result;
?>
</body>
</html>
5,3$_REQUEST變量
代表瀏覽器通過“get”方式 或 “post”方式提交的數(shù)據(jù)的合集。
即:它既能接收到get過來的數(shù)據(jù)曼追,也能接收到post過來的數(shù)據(jù)窍仰!
通常,一個表單拉鹃,只提交一種形式的數(shù)據(jù)辈赋,要么get數(shù)據(jù),要么post數(shù)據(jù)膏燕!
代碼演示
但钥屈,有一個情況,提交post數(shù)據(jù)的同時坝辫,也可以提交get數(shù)據(jù):
代碼如下:
1.request_form.php
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<form class="" action="request_data.php?id=5&username=張三豐" method="post">
<!--這樣寫的話表單就可以同時使用get和post兩種提交方式了,
表單里action地址問號后面的數(shù)據(jù)是以get方式提交的篷就,form表單中
各個表單項的數(shù)據(jù)是以post的方式提交的-->
<input type="text" name="num1" >
<br>
<input type="text" name="num2" >
<br>
<input type="submit" value="計算">
</form>
</body>
</html>
2.request_data.php
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<?php
$num1 = $_REQUEST['num1'];
$num2 = $_REQUEST['num2'];
$result = $num1 * $num2;
$username = $_REQUEST['username'];
echo "<br>num1和num2相乘的結果為:",$result;
echo "<br>這個人的名字叫:",$username;
?>
</body>
</html>
5.4$_SERVER變量
它代表任何一次請求中,客戶端或服務器端的一些“基本信息”或系統(tǒng)信息近忙,包括很多(10多項)竭业。
我們無非就是要知道智润,哪些信息是可以供我們使用的!
常用的有:
PHP_SELF: 表示當前請求的網(wǎng)頁地址(不含域名部分)
SERVER_NAME: 表示當前請求的服務器名
SERVER_ADDR: 表示當前請求的服務器IP地址
DOCUMENT_ROOT: 表示當前請求的網(wǎng)站物理路徑(apache設置站點時那個)
REMOTE_ADDR: 表示當前請求的客戶端的IP地址
SCRIPT_NAME: 表示當前網(wǎng)頁地址
代碼演示如下:
代碼如下:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<?php
/**
PHP_SELF: 表示當前請求的網(wǎng)頁地址(不含域名部分)
SERVER_NAME: 表示當前請求的服務器名
SERVER_ADDR: 表示當前請求的服務器IP地址
DOCUMENT_ROOT: 表示當前請求的網(wǎng)站物理路徑(apache設置站點時那個)
REMOTE_ADDR: 表示當前請求的客戶端的IP地址
SCRIPT_NAME: 表示當前網(wǎng)頁地址
**/
echo "<br>您訪問的網(wǎng)頁為:",$_SERVER['PHP_SELF'];
echo "<br>您訪問的網(wǎng)站為:",$_SERVER['SERVER_NAME'];
echo "<br>您訪問網(wǎng)站的物理路徑為:",$_SERVER['DOCUMENT_ROOT'];
echo "<br>您訪問的IP為:",$_SERVER['REMOTE_ADDR'];
?>
</body>
</html>
6.可變變量
含義:變量名本身又是一個“變量”的變量未辆。
示例:
$v1 = 10;
echo $v1; //輸出10
$str = “v1”; //這是一個變量窟绷,名為str,值為“v1”(字符串)
echo $$str; //輸出10咐柜。這里兼蜈,“$$str”就是所謂的“可變變量”
//相當于 echo $v1; 結果就是10
代碼演示如下:
代碼如下:
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<?php
$a = 15;
$b = "a";
$c ="b";
echo $$$c;//10 相當于$$b=>$a
?>
</body>
</html>
·