php基礎鞏固一

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相加
  • 判斷變量是否存在isset()

    • 存在,就返回true,不存在就返回false
    • 實際上,如果一個變量的值是null,返回的也是false
  • 修改變量值(賦值)

    • 第二次及以后給一個變量賦值,就算修改變量值
  • 刪除unset():就是斷開變量名跟數(shù)據(jù)之間的“引用關系”

命名規(guī)則

通常命名包括變量名,函數(shù)名,常量名,類名,接口名,等等

基本規(guī)則

  1. 只能使用大小寫字母,下劃線(_),數(shù)字
  2. 數(shù)字不能開頭
  3. 不能跟所在環(huán)境(系統(tǒng))的關鍵字重名(比如if, for, function...)

行業(yè)規(guī)則(潛規(guī)則)

基本規(guī)則,保證的是語法的正確性。
行業(yè)規(guī)則,保證的是是否能得到別人的尊重!
行業(yè)規(guī)則中,有如下幾種常用的命名規(guī)則:

  1. 駝峰命名法:
    示例:name, myName, myFatherName
  2. 帕斯卡命名法:
    示例:Name, MyName, MyFatherName
  3. 下劃線間隔法:
    示例:name, my_ame, my_father_name

變量間的傳值方式

  1. 這里討論的傳值方式是指:一個變量對另一個變量
  2. 它不僅僅適用于賦值語句,也適用于其他有同樣含義的語句,比如:函數(shù)的實參到形參
  3. 傳值方式只有2種:值傳遞,引用傳遞
  4. php中,所有變量,默認都是值傳遞。
  5. 要想使用引用傳遞,必須使用引用傳遞的符號: &

值傳遞

是指將一個變量的數(shù)據(jù)值(數(shù)據(jù)內容)拷貝一份,然后賦值給另一個變量。

$v1 = 1;
$v2 = $v1;//有值傳遞
$v3 = $v1 + 10;//無值傳遞
Paste_Image.png

引用傳值

將一個變量的引用關系拷貝一份,然后賦值給另一個變量,即另一個變量也同樣由該關系決定了指向某個數(shù)據(jù)

$v10 = 10;
$v20 = &$v10;
Paste_Image.png

賦值(傳值)完之后,兩個變量指向同樣一個數(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;     //此時,就是所謂“可變變量”
  1. 凡是$符號出現(xiàn),就會有可能理解為是一個變量
  2. 這里第一個“$”出現(xiàn)了,則php就視圖將其解釋為一個變量,變量名是$v1;
  3. 我們有知道,$v1的值是”abc”,
  4. 那么,第一個“$”符號后面的變量名,就得到為“abc”
  5. 即:echo 試圖輸出的是變量$abc, 自然是數(shù)字10

即從最右邊的$符號開始看起$(&v1) => $abc => 10,理論上,可變變量的嵌套還可以更多,比如:$$$def;

預定義變量

  1. 預定義變量又叫超全局變量,包括:$_GET, $_POST, $_SERVER, $_REQUEST, $GLOBALS, $_COOKIE, $_SESSION, ..........(大約10個)
  2. 作用域問題:php中,自定義的變量的作用域,分兩種:全局作用域(函數(shù)外),局部作用域(函數(shù)內)。但預定義變量的作用域稱為“超全局作用域”:全局作用域 + 局部作用域的總和(函數(shù)內外全都可用)
  3. 數(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,其實也可以理解為“打開”該網頁(abc.php),還可以理解為“請求”該網頁(abc.php)

形式二:
<a  href=”abc.php?uName=test1&uPswd=123”>Get</a>

其作用是:用戶點擊鏈接后,會將數(shù)據(jù)發(fā)送(提交)給頁面abc.php,其實也可以理解為“打開”該網頁(abc.php),還可以理解為“請求”該網頁(abc.php),這種請求也是get請求

形式三:
<script>
location.href = “abc.php?uName=test1&uPswd=123”;        //利用location對象的屬性href
</script>

其作用是:當該行語句執(zhí)行的時候(通常其實是在函數(shù)中),會將數(shù)據(jù)發(fā)送(提交)給頁面abc.php,其實也可以理解為“打開”該網頁(abc.php),還可以理解為“請求”該網頁(abc.php),這種請求也是get請求

形式四:
<script>
location.assign( “abc.php?uName=test1&uPswd=123”);  //利用location對象的方法assign()
</script>

其作用是:當該行語句執(zhí)行的時候(通常其實是在函數(shù)中),會將數(shù)據(jù)發(fā)送(提交)給頁面abc.php,其實也可以理解為“打開”該網頁(abc.php),還可以理解為“請求”該網頁(abc.php),這種請求也是get請求

不管哪種形式的get提交過來的數(shù)據(jù),獲取數(shù)據(jù)是一樣的:(在abc.php網頁中)

<?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,其實也可以理解為“打開”該網頁(abc.php),還可以理解為“請求”該網頁(abc.php) 接收post數(shù)據(jù)的形式為:(在abc.php網頁中)

<?php
    $v1 = $_POST[‘uName’];  //單引號也可以用雙引號,本質是一個字符串,其實是數(shù)組的鍵名(下標)
    $v2 = $_POST[‘uPswd’];  //該鍵名必須跟提交的時候的名字完全一致(區(qū)分大小寫)
    
    也可以顯示所有post數(shù)據(jù):
    var_dump($_POST)
?>

通常,網頁中的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’];
$v2 = $_GET[‘b’];   
//這樣取得post數(shù)據(jù):
$v3 = $_POST[‘uName’];
$v4 = $_POST[‘uPswd’];
//但,也可以這樣取(全有了):
$v1 = $_REQUEST[‘a’];
$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:當前網頁的文件路徑
    • QUERY_STRING: 表示一個get請求的整體字符串,類似這樣:

輸出所有項的代碼

<?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ù)定義

  1. 使用形式:define(“常量名”, 常量值),推薦常用名使用全大寫形式

例如

define("PI",3.14);
echo PI;// 3.14

使用const語法定義

  1. 使用形式: const 常量名 = 常量值;
  2. 但const語法只能在“最頂層”的代碼域中使用(不能在大括號中),也即,const語法不能在函數(shù)中或條件語句中或其他表示一個“范圍”的語句中使用

例如

const PI = 3.14;
if(PI > 10){
    const PW = 5;// 錯誤,只能定義在最頂部
}

使用常量

  1. 直接使用名字
  2. 使用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,此時會得到一個意想不到的結果:似乎該常量存在,并該常量的值就是該名字。

Paste_Image.png

預定義常量

php語言中,預定了大量的常量,可以直接使用。其中有些常量,是需要某些模塊打開之后才有(比如mysql模塊)

  • 比如M_PI(圓周率), PHP_OS(操作系統(tǒng)), PHP_VERSION(php版本號),PHP_INT_MAX(php中的最大的整數(shù)值)
  • 參考手冊〉附錄〉保留字列表〉預定義常量

魔術常量

魔術常量其實是一種值會隨著一定的條件(環(huán)境)而變化的常量,形式和使用上是常量,但實際上,其值會改變。

  • 比如:__DIR__(當前網頁文件的所在目錄),__FILE__(當前網頁文件),__LINE__(當前這一行)
  • 魔術常量其實類似變量,其值隨著不同代碼而變化,不區(qū)分大小寫
  • 參考手冊〉語言參考〉常量〉魔術常量

例如:

<?php 
    echo __DIR__;
    echo "<br />";
    echo __FILE__;
    echo "<br />";
    echo __LINE__;
 ?>

輸出結果為

D:\PHP\demo2
D:\PHP\demo2\get_1.php
6
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,321評論 6 543
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,559評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,442評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,835評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,581評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,922評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,931評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,096評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 49,639評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,374評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,591評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,104評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,789評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,196評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,524評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,322評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,554評論 2 379

推薦閱讀更多精彩內容