1. 程式人生 > >php基礎知識(語法與原理)

php基礎知識(語法與原理)

一、php簡介
PHP超文字前處理器。是嵌入HTML檔案中的伺服器指令碼程式。

PHP程式碼標記:<?php …. ?>

PHP檔案的副檔名:.php

PHP檔案的執行:必須從域名開始訪問

PHP每條語句必須以英文(;)結束

二、php網頁基礎知識
① IP地址
IP地址分為v4、v6兩個版本,v4長度為32位2進位制碼,v6為128位2進位制碼。v4版本IP在2010年左右已經用完,主要格式是192.168.4.238(點分十進位制法),由四段組成,每段8位二進位制,用十進位制表示的取值範圍為:0-255

特殊IP:127.0.0.1用於本機的軟體測試或網站測試,只能自己訪問自己的127。

② 域名解析器(DNS伺服器)
可以理解為,儲存了域名與IP地址對應表的資料庫

本地的DNS:hosts檔案,一個隱藏的系統檔案,沒有副檔名。當在瀏覽器中輸入域名時,首先在本地DNS查詢有無對應IP然後才在外網DNS查詢對應IP。hosts檔案的路徑:C:\Windows\System32\drivers\etc\hosts

③ 域名解析,訪問流程圖
在這裡插入圖片描述

三、php基礎語法
① php變數
php變數必須以”

”開頭,例如: name、$age

不能以數字開頭,最後按照駝峰命名法

寫在””引號中的變數最好用 { } 括起來,以免出現末端有字元不解析的情況

② php資料型別
標量資料型別:字串型、整型、浮點型、布林型

複合資料型別:陣列、物件

特殊資料型別:資源、NULL

(1)整型
取值範圍:-21億~21億

(2)浮點型 (可以包含整數)
取值範圍:-1.7E-308~1.7E+308

由於浮點數不能轉換成精確的二進位制,所以有時在運輸時會出現錯誤,例如:(0.7+0.1)*10==8 結果為false

(3)字串型(在引號中,解析變數,需在變數後加上符合或者空格)
雙引號“”
雙引號內解析變數的值

單引號‘’
單引號內解析變數的名,直接在客戶端顯示$name

長字串
$Str = <<<heredoc “heredoc”的名字可以隨意取,按照變數命名規則

……. 填寫字串內容

heredoc; 結尾“heredoc”必須另起一行,分號結束

(4)資源型
對第三方外掛等的操作,如呼叫mysql資料庫等,第三方的內容稱之為資源

(5)布林型
只有true或false兩種型別值

(6)NULL (空型)
如果變數不存在,返回NULL,空型只有一個值,就是NULL

(7)陣列(一組數的集合,通過索引查詢元素)
a ) 陣列的分類:

  1. 索引陣列 (與js陣列基本相同)
    陣列的下標是從0開始的正整數,這樣的陣列稱為“索引陣列”

$arr=array(10,20,30,40);

$arr[0]=10;

2.關聯陣列

陣列的下標是字串,這樣的陣列稱為“關聯陣列”

$arr=array(“name”=>”Tabb”,”sex”=>”gender”,”age”=>”22”);

由於關聯陣列沒有整數型下標,所以不適合使用for迴圈來遍歷

  1. 混合陣列

陣列下標既有整型,也有字串,這樣的陣列稱為“混合陣列”

$arr = array(“name” => “tabb”, “age” => “20”, “tom”, 20);

echo $arr[0] 輸出結果為“tom”;說明整型下標是從”tom”開始計算的

b ) 陣列的建立:

  1. 使用array()函式建立陣列:

通過“=>”過載符號給陣列元素指定下標

如果陣列元素沒有指定下標,其下標為,當前最大索引+1,示例:

$arr=array(20=>”tabb”,2=>”28”,20,”tom”) 其中”20”的索引為21,如果都是字元下標,那麼沒有指定下標的元素,索引從0開始

使用array建立陣列:

a r r = a r r a y ( [ arr = array([ key=>] v a l u e , [ value,[ key=>]$value,…);

  1. 使用[ ]中括號建立陣列

a r r [ k e y ] = arr[“key”]= value

不像js,可以不用先宣告一個空陣列,如果指定的陣列不存在,會自動建立陣列

    [ ] 中括號內容為空時,建立陣列

    $arr[ ]=30;

如果陣列不存在,就會建立一個數組,並新增第一個元素

如果陣列存在,新增陣列的元素的下標,是陣列中的最大整形下標+1

c ) 多維陣列:
array(array(1,2,3,4),1,2,3,array(1,2,3,4))

使用[ ]中括號可以快速建立多維陣列:

$arr[ ][ ][ ][ ]=10; 快速建立一個4維陣列

d ) 陣列相關函式:

  1. print_r ( )
    列印關於變數的易於理解的資訊

如果給出的陣列或者物件,按照一定格式顯示鍵和元素

  1. unset ( )

刪除陣列元素,刪除的是陣列元素的值,下標還存在,不同於js的長度不變,此處刪除元素後,陣列長度發生變化

刪除變數

  1. count ( )

計算陣列中的單元數目或物件中的屬性個數

  1. foreach ( ) 只能用於遍歷陣列

foreach( a r r a s [ arr as [ key=>] v a l u e ) [ value ){ } 如果是索引陣列,[ key=>]這個內容可以不要

③ php資料型別判斷
(1) var_dump()

列印變數的相關資訊,可以列印多個變數,用”,”逗號隔開

(2) is_*() 一組判斷變數型別的方法,返回一個布林值

is_bool():判斷變數是不是布林型
is_int():判斷變數是不是整型
is_float ():判斷變數是不是浮點型
is_numeric():判斷變數是不是數值型
is_string():判斷變數是不是字串型
is_array():判斷變數是不是陣列型
is_object():判斷變數是不是物件型
is_null():判斷變數是不是空型
is_resource():判斷變數是不是資源型
……

(3) isset()

檢測變數是否設定

返回值:如果變數存在,且不等於NULL,返回true,否則,返回false

(4) empty ( )

檢測一個變數是否為空,例如””,0,”0”,null,array(),var $var 以及沒有任何屬性的物件都將被認為是空,如果為空,返回值TRUE

④ 資料型別的轉換
(1)轉換為bool值 (bool)

$a = “0”;

r e s u l t = ( b o o l ) result = (bool) a;

var_dump($result) 結果為: bool(false)

這些資料轉換為bool值時為false:0、0.0、””、”0”、array()、null

資源型別轉換為bool永遠為true

(2)轉換為整型數值 (int) (int)$name

1.如果以數值開頭的字串,將整型部分轉換為整型數值,去除後面的字元

2.如果不是數值開頭的字串,轉換為0

3.bool值true轉換為1,false轉換為0,null轉換為0

(3)轉換為浮點數值 (float) (float)$name

1.如果以數值開頭的字串,將數字部分轉換為數值(包含浮點部分),去除後面的字元

2.如果不是數值開頭的字串,轉換為0

3.bool值true轉換為1,false轉換為0,null轉換為0

(4)轉換為字串 (string) (string)$name

1.null、false轉換為””,空字串

2.true轉換為字串“1”

⑤ php運算子
(1)數值運算子(+、-、/、*、%、++、–)

使用方法與js中的使用方法基本相同

(2)字串運算子

“.”點運算子表示字串連結符,與js中用”+”號拼接字串類似

$a=”abc”;

b = b= a.100 或者使用”.=”表示自己與自己連結字串:$a.=100

(3)賦值運算子(=、+=、-=、*=、/=、%=)與js基本相同

(4)比較運算子(>、<、>=、<=、、!=、=、!==)與js基本相同

舉例:10==“10px” 結果為:true;在包含數字的運算中“10px”會先轉換為數值

舉例:10===“10px” 結果為:false; 全等比較,包括資料型別

(5) 邏輯運算子(&&、||、!)與js基本相同

(6) 三元運算子(表示式?結果1:結果2)與js基本相同

(7) 運算子優先順序

在這裡插入圖片描述

⑥ php獲取表單資料

使用者名稱:<input type="text" name="username">

密碼:

//隱藏域,向後端傳遞資訊

<input type="submit">

(1) 超全域性陣列變數:$_GET[ ]

獲取get方法提交的資料,存放到GET陣列中

array(2) { [“username”]=> string(6) “abcdef” [“password”]=> string(5) “12345” }

獲取其中的資料示例: u s e r n a m e = username= _GET[“name”]

(2) 超全域性陣列變數:$_POST[ ]

獲取post方法提交的資料,存放到POST陣列中

⑦ php中的條件判斷if和switch 與js基本相同
switch比if的效率高,主要用於取值判斷

⑧ php中的迴圈語句
(1)while(條件判斷){ break } 與js基本相同

(2)for(條件判斷){ } 與js基本相同

(3)break語句 可以新增break 2表示跳出兩層迴圈

(4)continue語句 跳出本次迴圈,直接開始下次迴圈

⑨ php中的拷貝傳值和引用傳地址
(1) 拷貝傳值

將一個變數的值,“複製”一份,傳遞給另一個變數,這兩個變數之間沒有關係,是相互獨立的兩個變數,修改其中一個變數,另一個變數不會變

php中屬於拷貝傳值的資料型別為:字元型、整型、浮點型、NULL、陣列

(2) 引用傳地址

將一個變數的資料地址,“複製”一份,傳遞給另一個變數,這兩個變數指向的是“同一標物”,如果這個”標物”傳送變化,兩個變數都會發送變化。所以修改一個變數的值,則另一個變數也會發生變化。

php中屬於引用傳地址的資料型別為:物件、資源

手動宣告引用傳地址:在引用變數前,加上“&”符號即可,這樣可以使所有的資料型別實現引用傳地址,示例如下

$a=10; KaTeX parse error: Expected 'EOF', got '&' at position 3: b=&̲a; 這樣即是把 a a的引用地址傳地給了 b

⑩ php中的函式 與js基本相同
示例如下:

function name (KaTeX parse error: Expected '}', got 'EOF' at end of input: …不能相同,只能唯一存在,且不帶符號

      echo “{$name}的年齡是20”;

return;

}

(1)函式的引數可以傳遞引用地址:

function test ( & a , a, b ){ //此處傳遞的是$a的引用路徑

      $arr[ ]=$abc;

}

(2)函式的作用域:

全域性變數:在函式外部定義的變數,網頁執行完消失

區域性變數:在函式內部定義的變數,函式執行完消失

不同與js,在php中,全域性變數不能直接在函式內部使用

在php函式中使用global關鍵字宣告全域性變數

使用global關鍵字,可以將一個變數,宣告為全域性變數,這裡的全域性變數不是js中認為的全域性變數

global關鍵字的使用:

global關鍵字,只能在函式內部使用。
global關鍵字,不能一邊宣告全域性變數,一邊賦值。不能有這樣的寫法:
global $a=10;

global的真正含義,是“引用傳地址”,與js中的全域性變數不同
(3)php日期時間函式:

  1. date( );

echo date(“Y-m-d H:i:s”); 輸出時間,可改為Y年m月d日

  1. time( ); 時間戳 1970年到當前的秒數(js是毫秒)

(4)include 語法結構

    描述:包含並執行指定檔案

    語法:include $filename 或者 include($filename);

    示例:include “include/conn.php”;

(5)requrie 語法結構

    描述:包含並執行指定檔案

    語法:requrie $filename 或者 requrie ($filename);

    示例:requrie “include/conn.php”;

注意:include與require都是包含並執行檔案,但是是有區別的。如果包含的檔案不存在,include將報一個警告錯誤,指令碼繼續向下執行。而require將報一個致命錯誤,指令碼將立即終止執行。

(6)header()

    描述:傳送一個自定義的http報文,即:php返回的資料格式或字符集

    語法:void header( string $string)

    示例:

※ header(“content-type:text/html;charset=utf-8”);

※ header(“location:http:www.baidu.com”); //網頁跳轉