PHP学习记录
文章目錄
- 1、PHP概述:
- 2、web工作原理:
- 3、php腳本語(yǔ)言:
- 3、變量
1、PHP概述:
- php的目標(biāo)是允許網(wǎng)絡(luò)開(kāi)發(fā)人員快速編寫動(dòng)態(tài)頁(yè)面
- 主要被用于開(kāi)發(fā)各種網(wǎng)站程序
- 是腳本語(yǔ)言,不需要事先編譯,在服務(wù)器運(yùn)行。
2、web工作原理:
web服務(wù)器: 瀏覽器 → 輸入url地址 → 顯示網(wǎng)站內(nèi)容
服務(wù)器是一種軟件,把安裝運(yùn)行了服務(wù)器的電腦叫主機(jī)(host)
3、php腳本語(yǔ)言:
開(kāi)始: <?php
結(jié)束: ?>
<?php ?>表示進(jìn)入php模式。
-
PHP代碼可以嵌入到 html 代碼中任何位置,并且可以嵌入任意多個(gè)。
-
文件末尾的?>結(jié)束標(biāo)志可以省略
-
一些PHP語(yǔ)句的結(jié)尾要加上;表示一句話的結(jié)束
-
結(jié)束標(biāo)記?>就隱含了一個(gè);
1)多行注釋
/*多行注釋*/2)單行注釋:
//我是單行注釋3、變量
變量是用于臨時(shí)(只有在我們的程序的運(yùn)行過(guò)程中才存在)存儲(chǔ)值(數(shù)據(jù))的容器
變量用于存儲(chǔ) 數(shù)字、文本字符串 或者數(shù)組這些數(shù)據(jù)!
1.變量的銷毀:
unset($變量名稱)$and1=1;unset($and1);//銷毀$and變量echo $and1;//提示出錯(cuò),因?yàn)樽兞恳呀?jīng)被銷毀了!2.變量的命名規(guī)則:
1)變量名稱嚴(yán)格區(qū)分大寫
$name,$NAME,$Name都是不同的變量2)
字母或者下劃線開(kāi)頭
后面接任意數(shù)量的字母數(shù)字下劃線都可以!
錯(cuò)誤的命名方式:
$1name 錯(cuò)誤點(diǎn):以數(shù)字開(kāi)頭了
$n ame 錯(cuò)誤點(diǎn):中間有空白字符
總結(jié)一下:變量名只能包含 字母 數(shù)字 下劃線 并且必須以字母或者下劃線開(kāi)頭!
3)最好不要用一些關(guān)鍵字作為變量名稱(因?yàn)樵谄渌木幊陶Z(yǔ)言里面是完全不被允許的)!
4.變量類型
1.變量類型簡(jiǎn)介
1)bool (布爾型)
$a=true;
var_dump($a);
往變量里面存true或者false,那么這個(gè)變量就是布爾型了
2)int (整型)
往變量里面存整數(shù),那么這個(gè)變量就是整型變量啦!
3)float (浮點(diǎn)型,也稱double)
往變量里面存小數(shù),那么這個(gè)變量就是浮點(diǎn)型數(shù)據(jù)了!
$a=1.1;
var_dump($a);
4)string (字符串)
字符串就是一系列的字符組成串在一起!
1單引號(hào):
在定義一些簡(jiǎn)單的字符串的時(shí)候使用單引號(hào)這種方法效率比較高!
2雙引號(hào)
3定界符
$b=200;$a=<<<wwwdwqdqwdwq{$b}dwqdqdqdqdwqdwqcwcfwefwefcscwecwefwdqwdqdefwefwefewfwewww;var_dump($a);3定界符
$b=200;
KaTeX parse error: Expected '}', got 'EOF' at end of input: …<www dwqdqwdwq{b}dwqdqdqdqdwqdwqcwcfwefwefcscwecwefwdqwdqdefwefwefewfwe
www;
var_dump($a);
4)NULL
null表示一個(gè)變量沒(méi)有值,表示空將變量直接賦值為null聲明的變量尚未被賦值被unset函數(shù)銷毀的變量$a=1111;unset($a);var_dump($a);5.常量
1.概念
常量是用于臨時(shí)(只有在我們的程序的運(yùn)行過(guò)程中才存在)存儲(chǔ)值(數(shù)據(jù))的容器
2.定義和使用
define(‘常量名稱’,常量值) 或者 define(“常量名稱”,常量值)
常量的命名:
1)和變量一樣 只能包含字母數(shù)字下劃線 并且必須以 字母或者下劃線開(kāi)頭
2)按照慣例常量名字總是大寫的
3)自定義的常量是嚴(yán)格區(qū)分大小寫的!
defined()函數(shù)來(lái)檢查是否定義了某個(gè)常量
3.常量和變量的區(qū)別
1)常量前面沒(méi)有美元符號(hào)($)
2)常量只能用define()函數(shù)定義,不能通過(guò)賦值語(yǔ)句
3)********常量可以不用理會(huì)變量范圍的規(guī)則而在任何地方定義和使用
4)常量一旦被定義就不能被重新定義或者取消定義
5)常量的值只能是bool,int,float,string類型
4.預(yù)定義常量
預(yù)定義常量說(shuō)白了就是我們的PHP內(nèi)核已經(jīng)幫我們定義好了的常量!
其中有的預(yù)定義常量是一__開(kāi)頭的,這些預(yù)定義常量我們又叫它魔術(shù)常量
代碼所在的位置不同他的值也是不同的,所以它加 魔術(shù)常量
八個(gè)常用的魔術(shù)常量
http://php.net/manual/zh/language.constants.predefined.php
預(yù)定義常量是不區(qū)分大小寫的!
6.運(yùn)算符
概述:
說(shuō)白了就是一些符號(hào),這些符號(hào)可以將變量或者數(shù)據(jù)執(zhí)行某中運(yùn)算!
1.算術(shù)運(yùn)算符
1)+
2)-
第一個(gè)意思: 減號(hào)
第二個(gè)意思: 取反
$a=1; $b=-$a; echo $b;//-1 echo '<br />'; echo $a;//1注意:取反并不會(huì)影響到被取反變量本身的值!
3)* 乘號(hào)
4)/ 除號(hào)
$a=10;$b=2;$c=$a/$b;echo $c;5)% 取模
$a=12;$b=2;echo $a%$b;6)++ 自增
前++
當(dāng)在一個(gè)語(yǔ)句里面需要使用到被自增的變量的值的時(shí)候,前++會(huì)先執(zhí)行自增,然后再返回自增之后的值!
后++
當(dāng)在一個(gè)語(yǔ)句里面需要使用到被自增的變量的值的時(shí)候,后++會(huì)先返回變量的值然后再去執(zhí)行自增
注意:
$a=10;++$a;//這種情況不需要用到自增變量值的時(shí)候,和后++無(wú)區(qū)別echo $a;7)-- 自減
前–
后–
$a=10;//$a--;//$a=$a-1; 和--$a沒(méi)區(qū)別;echo $a--;//echo $a;$a=$a-1;echo '<br />';echo $a;注意:自增或者自減是對(duì)變量而言的!
2.字符串運(yùn)算符
. 連接運(yùn)算符
3.賦值運(yùn)算符
=
把右邊的值賦給左邊的變量
$a=1;
二元運(yùn)算符
表達(dá)式是 PHP 最重要的基石。在 PHP 中,幾乎所寫的任何東西都是一個(gè)表達(dá)式。簡(jiǎn)單但卻最精確的定義一個(gè)表達(dá)式的方式就是“任何有值的東西”。
+=$a=1;$b=2;$a+=$b;//$a=$a+$b;echo $a;-=$a=2;$b=1;$a-=$b;//$a=$a-$becho $a;4.比較運(yùn)算符
概念:
對(duì)操作數(shù)(按照比較運(yùn)算符的要求,規(guī)則)進(jìn)行比較
如果比較出的結(jié)果滿足比較運(yùn)算符的要求那么結(jié)果就是true(真,成立,滿足),否則就是false(假,不成立,不滿足)
PHP中規(guī)定:
使用echo輸出布爾類型值的時(shí)候
echo true;它在頁(yè)面中會(huì)輸出1
echo false;它會(huì)在頁(yè)面中什么都不輸出
規(guī)定的,記住就好!所以說(shuō)我們?cè)跍y(cè)試的過(guò)程中如果需要輸出布爾類型值的時(shí)候我們最好使用var_dump()來(lái)輸出更明了的結(jié)果!
1)== 值是否相等
如果值相等則就是 true(真,成立)
如果值不相等那么就是false(假,不成立)
2)=== 全等(值要相等,類型也要相等)
如果兩邊操作數(shù)的值 全等那么就是true否則就是false
3)!= 值是否不相等
如果兩邊操作數(shù)的值不相等那么就是true,否則就是false
4)<> 同上
5)!== 不全等
如果兩邊的操作數(shù)不全等那么就是true,否則就是false
/*
6)< 小于
比較兩邊操作數(shù)的值,前面的是否小與后面的
這句話正確還是錯(cuò)誤
7)> 大于$a=10;$b=1;var_dump($a>$b);8)<= 小于等于
$a=1;$b=1;var_dump($a<=$b);//$a小與等于$b就是true,否則就是false9)>= 大于等于
$a=2;$b=1;var_dump($a>=$b);//true5.邏輯運(yùn)算符
概念:
對(duì)表達(dá)式進(jìn)行邏輯運(yùn)算,運(yùn)算出的結(jié)果是布爾類型的值(true,false)
要求:
參與邏輯運(yùn)算的表達(dá)式的值是布爾類型的值,如果不是布爾類型的值會(huì)被PHP自動(dòng)轉(zhuǎn)換成布爾類型的值,然后再參與運(yùn)算!
1)邏輯與
and 或者 &&
運(yùn)算規(guī)則:
左右兩邊的表達(dá)式的值都為true的時(shí)候,運(yùn)算的結(jié)果就是true
否則只要其中任意一個(gè)為false,運(yùn)算的結(jié)果就是false;
現(xiàn)實(shí)舉例:
true 及格
false 不及格
左右兩邊的表達(dá)式就是我們要考試的科目;
要求:當(dāng)語(yǔ)文和數(shù)學(xué)都及格的時(shí)候那么,最終的結(jié)果才能夠通過(guò)(true),否則就是不通過(guò)(false)
中間隱含一個(gè)問(wèn)題:“短路”,運(yùn)算符的優(yōu)先級(jí)的問(wèn)題!
2)邏輯或
or 或者 ||
運(yùn)算規(guī)則:
左右兩邊的表達(dá)式的值有一個(gè)為true,運(yùn)算的結(jié)果就是true
,只有當(dāng)兩邊的值都是false的時(shí)候,結(jié)果才會(huì)是false
現(xiàn)實(shí)舉例:
要求:當(dāng)語(yǔ)文和數(shù)學(xué)有一門及格那么最終的結(jié)果就是通過(guò)true
中間隱含一個(gè)問(wèn)題:“短路”,運(yùn)算符的優(yōu)先級(jí)的問(wèn)題!
3)邏輯異或
xor
運(yùn)算規(guī)則:
左右兩邊的表達(dá)式的值不一樣的時(shí)候結(jié)果就是true,如果一樣那么運(yùn)算的結(jié)果就是false
4)邏輯非
!
運(yùn)算規(guī)則:
將原來(lái)表達(dá)式的值否定掉,原來(lái)是true,那么結(jié)果就是false
原來(lái)是false,那么結(jié)果就是true
- 5)運(yùn)算符
1)? :
三元運(yùn)算
格式:
表達(dá)式1 ? 表達(dá)式2 : 表達(dá)式3;
如果表達(dá)式1的值為true,那么就執(zhí)行表達(dá)式2,否則那么就執(zhí)行表達(dá)式3
$a=false ? 10 : 20;
echo $a;//20
涉及到跨平臺(tái):
3)@
屏蔽表達(dá)式可能發(fā)生錯(cuò)誤!
echo @$a;
當(dāng)然,實(shí)際在哪些地方應(yīng)用,我們用到大家就知道了!
4)=>
5)->
6)instanceof
8.運(yùn)算符的優(yōu)先級(jí)
優(yōu)先級(jí)的概念:
誰(shuí)的優(yōu)先級(jí)別高就先算誰(shuí)!
結(jié)合方向:
規(guī)定了從那個(gè)方向開(kāi)始算的問(wèn)題!
優(yōu)先級(jí)這個(gè)概念只要知道一些基本的常用的就可以了,因?yàn)槲覀冊(cè)趯?shí)際開(kāi)發(fā)中幾乎沒(méi)有那么需要寫非常復(fù)雜的表達(dá)式,
讓我們?nèi)タ紤]先算誰(shuí),后算誰(shuí)的問(wèn)題!
優(yōu)先級(jí)歸納:
1)[無(wú)]遞增遞減
2)[右]邏輯非!
3)[左]乘,除,取余
4)[左]加,減,字符串連接符
5)[無(wú)]包含大于號(hào)或者小于號(hào)的比較運(yùn)算符
6)[無(wú)]不包含大于號(hào)或者小于號(hào)的比較運(yùn)算符
7)[左]邏輯與&&
8)[左]邏輯或||
9)[左]? :
10)[右]賦值運(yùn)算符
12)[左 ]邏輯異或xor
圓括號(hào)的作用:
用圓括號(hào)可以將表達(dá)式里面的某一塊看成一個(gè)整體!
*使用括號(hào)可以增強(qiáng)代碼的可讀性。
6.流程控制
if語(yǔ)句
switch語(yǔ)句
循環(huán)語(yǔ)句
與C語(yǔ)言基本相同就不再詳寫。
特殊的流程控制語(yǔ)句
1.break語(yǔ)句
作用:用于switch語(yǔ)句,for,while,do…while,foreach,用于中斷這些語(yǔ)句!
后面可以接上一個(gè)數(shù)字來(lái)表示跳出幾層循環(huán)!默認(rèn)不加就是跳出當(dāng)前循環(huán)語(yǔ)句!
2.continue語(yǔ)句
作用:只能用在循環(huán)語(yǔ)句,跳出本次循環(huán),并不是結(jié)束整個(gè)循環(huán)語(yǔ)句!
3.exit()語(yǔ)句
作用:結(jié)束當(dāng)前整個(gè)程序的執(zhí)行!
die()語(yǔ)句作用同上!
7.自定義函數(shù)
function 函數(shù)名([形式參數(shù)1,形式參數(shù)2,…形式參數(shù)n]){
//各種PHP代碼…
//…
return 表達(dá)式;//也可以不返回,如果不寫那么默認(rèn)返回null
}
的返回值:
返回給調(diào)用者,默認(rèn)返回null
當(dāng)執(zhí)行完return 命令后,即結(jié)束函數(shù)。
二、PHP變量的范圍
1.局部變量
.全局變量
$i=10;//全局變量(外部變量)define('MY_NAME','石明康');function test(){echo MY_NAME;global $i;//聲明$i為全局變量,然后再這個(gè)函數(shù)內(nèi)部就可以使用$iecho $i;$a=1;}test();靜態(tài)變量:
三、參數(shù)的傳遞
1.按值傳遞參數(shù)
默認(rèn)的,我們?cè)趥鬟f參數(shù)的時(shí)候默認(rèn)使用的就是這個(gè)方式!
對(duì)形式參數(shù)的操作,根本不是影響到實(shí)際參數(shù)(變量)的值,兩者相當(dāng)于沒(méi)有聯(lián)系!
2.按引用傳遞參數(shù)
按引用傳遞參數(shù),相當(dāng)于形式參數(shù)和實(shí)際參數(shù)指的是同一個(gè)人,只是名字不一樣,對(duì)于形式參數(shù)的操作會(huì)直接影響到實(shí)際參數(shù)(變量);
3.函數(shù)的默認(rèn)參數(shù)
可以給形式參數(shù)設(shè)置默認(rèn)值,設(shè)置方法很簡(jiǎn)單直接賦值即可!
給形式參數(shù)加默認(rèn)值的時(shí)候是重右往左加的,右邊的必須有,才能夠給左邊的加!
四、可變函數(shù)(變量函數(shù))
直接把函數(shù)賦值給變量
可變函數(shù)不能用于例如 echo,print,unset(),isset(),empty(),include,require 以及類似的語(yǔ)言結(jié)構(gòu)。需要使用自己的包裝函數(shù)來(lái)將這些結(jié)構(gòu)用作可變函數(shù)。
五、遞歸函數(shù)
遞歸函數(shù)即在函數(shù)內(nèi)部自己調(diào)用自己的函數(shù)。
遞歸函數(shù):
1)函數(shù)在被調(diào)用的執(zhí)行過(guò)程中會(huì)在內(nèi)存里面分配空間用于存儲(chǔ)臨時(shí)數(shù)據(jù),那么函數(shù)在執(zhí)行過(guò)程中默認(rèn)之間時(shí)沒(méi)有聯(lián)系的(除了
靜態(tài)變量,按引用傳,全局變量)。里面的變量默認(rèn)都是局部變量,相互之間沒(méi)有影響!
2)遞歸函數(shù),在函數(shù)的內(nèi)部需要有適時(shí)結(jié)束函數(shù)運(yùn)行的條件!
六、內(nèi)部(內(nèi)置)函數(shù)
PHP提供給我我們?cè)S多現(xiàn)成的函數(shù)或者結(jié)構(gòu),我們可以在實(shí)際的開(kāi)發(fā)中直接使用!
還有一些函數(shù)需要開(kāi)啟特定地 PHP 擴(kuò)展模塊,否則在使用它們的時(shí)候就會(huì)得到一個(gè)致命的“未定義函數(shù)”錯(cuò)誤。
一些常用的內(nèi)置函數(shù)或者擴(kuò)展的函數(shù),我們?cè)诤竺鏁?huì)陸陸續(xù)續(xù)的學(xué)習(xí)到,一些不太常用的可能我們沒(méi)有辦法全部講到,但是
你使用函數(shù)是用來(lái)完成功能的,說(shuō)白了,你有這樣的需求,才會(huì)去找對(duì)應(yīng)的函數(shù)!
七,數(shù)組
一、數(shù)組類型
二、數(shù)組創(chuàng)建
方法 一、
變量名稱[索引值]=數(shù)據(jù);
變量名稱[]=數(shù)據(jù);//不寫索引值默認(rèn)是 索引數(shù)組,從0開(kāi)始
方法 二、
變量名稱=array(
索引值=>數(shù)據(jù),
…
);
數(shù)據(jù)里面還可放數(shù)組類型的數(shù)據(jù),同一個(gè)數(shù)組中存儲(chǔ)任何類型的數(shù)據(jù)
多維數(shù)組:
訪問(wèn)數(shù)值的方法
變量名稱[索引值][索引值]…
三、數(shù)組的遍歷
遍歷數(shù)組:每個(gè)都經(jīng)歷一遍的意思
1)for循環(huán)
用的比較少,因?yàn)橛腥毕?br /> 2)foreach語(yǔ)句來(lái)實(shí)現(xiàn)遍歷數(shù)組的目的foreach語(yǔ)句來(lái)實(shí)現(xiàn)遍歷數(shù)組的目的
foreach(數(shù)組變量 as 變量1){
//每次循環(huán)執(zhí)行的語(yǔ)句
變量1代表當(dāng)前正在經(jīng)歷(訪問(wèn))的數(shù)據(jù)
}
foreach(數(shù)組變量 as 變量1=>變量2){
//每次循環(huán)執(zhí)行的語(yǔ)句
變量1代表當(dāng)前正在經(jīng)歷(訪問(wèn))的數(shù)據(jù)的索引值
變量2代表當(dāng)前正在經(jīng)歷(訪問(wèn))的數(shù)據(jù)
}
三、預(yù)定義超全局?jǐn)?shù)組變量
已經(jīng)定義好了(存在)的變量(存放的數(shù)據(jù)的類型是數(shù)組)。
超全局:超級(jí)全局變量,作用域(有效區(qū)域)!
傳遞數(shù)據(jù)(提交數(shù)據(jù))給服務(wù)器端主要兩種方式
1.get方式
比如:
?參數(shù)名=參數(shù)值&參數(shù)名=參數(shù)值…
http://localhost/demo5_3/index.php?參數(shù)名=參數(shù)值
在服務(wù)器端(請(qǐng)求的php文件這邊)可以通過(guò)$_GET來(lái)獲取到
$_GET索引值為參數(shù)名,索引值對(duì)應(yīng)的數(shù)據(jù)就是參數(shù)值
2.post方式
比如表單 post發(fā)送過(guò)來(lái)的!
可以通過(guò)$_POST來(lái)獲取到!
四.字符串處理
一、去除空格或其他字符函數(shù)
二、大小寫轉(zhuǎn)換函數(shù)
$str='test';var_dump($str);$str1=strtoupper($str);var_dump($str);$str='TeSt';var_dump($str);var_dump(strtolower($str));var_dump($str);三、字符串查找函數(shù)
1.substr_count$str='testteste';var_dump(substr_count($str,'te'));$text2 = 'gcdgcdgcd';echo substr_count($text2, 'gcdgcd');$str='testteste';var_dump(substr_count($str,'te',1,8));//不能超出字符串2.strpos$str='testteste';var_dump(strpos($str, 't1'));if(strpos($str, 't')===false){echo '沒(méi)找到!';}else{echo '找到啦!';}$str='testteste';var_dump(strpos($str, 't',1));3.strstr$str='testteste';var_dump($str);var_dump(strstr($str,'s'));var_dump(strstr($str,'s',true));四、字符串替換函數(shù)
1.str_replace$str=array('abc123abc','123abcabc','abcab123c');var_dump($str);$str1=str_replace(array('1','2','3'),array('一','二','三'),$str,$count);echo $count;var_dump($str1);五、與html標(biāo)簽相關(guān)的函數(shù)
1.htmlspecialchars$str=<<<START<p style="color:red;font-size:128px;">單位確定為取得完全</p>" 'START;echo $str;echo "\n";echo htmlspecialchars($str);2.strip_tags$str=<<<START<p style="color:red;font-size:128px;">單位確定為取得完全</p><div style="color:red;">的武器大全我</div>START;//echo $str;//echo "\n";echo strip_tags($str,"<div><p>");六、字符串截取函數(shù)
1.substr$str='testdqwdwqdwqdqdwq';echo substr($str,3,2);$str='test';echo substr($str,-3,2);七、字符串分隔函數(shù)
1.explode$str='test,test1,test2,test3';var_dump(explode(',',$str,2));2.str_split$str='test';var_dump(str_split($str,3));一.會(huì)話控制—cookie
一、Cookie
例:setcookie('username',' $name',time()+3600);
2.在服務(wù)器端讀取cookie內(nèi)容
$_COOKIE if(!isset($_COOKIE['username']))3.將多維數(shù)組應(yīng)用到Cookie中
setcookie("member[name]",'薛之謙');setcookie("member[password]",‘xiaobaixue');4.刪除Cookie
setcookie("member", ' ',time() -1); setcookie('username',$name,time()-1);二、Session
1.開(kāi)啟session
總結(jié)