超級全局變量:
$GLOBALS ?所以全局變量數組
$_SERVER 服務器環境變量數組
$_GET 通過GET方法傳遞給該腳本的變量數組
$_POST 通過POST方法傳遞給該腳本的變量數組
$_COOKIE cookie變量數組
$_FILES 與文件上載相關的變量數組
$_ENV 環境變量數組
$_REQUEST 所有用戶輸入的變量數組
$_SESSION 會話變量數組
常量一旦定義就不能改變,通常用define()定義
------------------------------2016.9.21-----------------------------------
操作符、數學函數、foreach、each、list
單引號:只能插入字符串,理論上速度會快些(常用)。
雙引號:可以使變量和轉移序列都會得到相應的解析
**********************
操作符:
0==“0” 這個返回為true,因為操作數相等
0===“0” 這個返回為false,因為數據類型不同
**********************
三元運算符:
<?php
$total = 80;
$sum = $total>50 ? '成功' : '失敗' ;
echo $sum;
?>
**************
錯誤抑制符 @ :
//如果輸出報錯就不顯示出來
$a = @(100/0);//不過在開發中,最后講錯誤都暴露出來
echo $a;
*****************
操作符優先級:為了避免優先級混亂,可以使用括號幣開優先級
********************
在循環里面:
break 退出當前循環
continue 退出當前本次循環,并且繼續下次循環
exit 退出整個程序
********************
生成整數隨機數: ? rand([int min,int max]);
生成更好的隨機數(推薦,速度更快):? mt_rand([int min,int max]);
********
數字格式化數據:
$i=123456789;
//括號內第一位是變量,第二位是保留小數點后幾位,第三位和第四位只是用什么符號(建議不動)
$si = number_format($i,2,".",",");
echo $si;
*********
數學函數:
abs() ?絕對值
floor() ?舍去法取整
ceil() ?進一法取整
round() ?四舍五入
min(1,2,3,4,5,6,7,8) ?求最小值或數組中最小值
max(1,2,3,4,5,6,7,8)? 求最小值或數組中最小值
*********
打印數組: print_r();
$userNames可以理解為一個數組變量,而$userNames[x]可以理解成數組變量下的小變量
$userNames=array('小A','小B','小C','小D','小E');
//顯示數組中所有個數:count()
//通過for循環來顯示數組里的所有值
for($i=0;$i<count($userNames);$i++){?
? echo ($i+1).'---'.$userNames[$i];
? echo '<br/>';
}
//foreach只能用于遍歷數組,所以要先進行判斷 ?is_array()進行判斷
if(is_array($userNames)){
//如果key不是從0開始,或者說,壓根不是數字,那么無法用for循環來實現顯示數據列表
//通過foreach循環來遍歷數組,這方式好處,不需要去考慮key
foreach($userNames as $key => $value){
? ? echo $key.'---'.$value.'<br/>';
}
}else{
? echo '普通變量';
}
************
自定義鍵數組:
$userNames=array('A'=>'小A','B'=>'小B','C'=>'小C','小D','小E');
//此時小A的key就是A(依次同理)
echo $userNames['A'];//打印出來的就是小A
echo $userNames[0];//打印的會是小D
追加數組:
$userAges['小A'] = 19;
$userAges['小B'] = 25;
$userAges['小C'] = 35;
//和這樣是一個意思:? $userAges = array('小A' => 19,'小B' => 25,'小C' => 35);
***************
each() 函數返回當前元素的鍵名和鍵值,并將內部指針向前移動。
each循環的使用:
$userNames=array('A'=>'小A','B'=>'小B','C'=>'小C');
//兩個感嘆號,表示真實存在的數據轉換成布爾值
while(!!$a=each($userNames)){
//這里,我們使用each來循環出來所有的數據相當于:
//$a = array([0] =>A,[1] =>小A,[value]=>小A,[key] =>A);
? ? ? echo $a['key'].'---'.$a['value'].'<br/>';
}
reset();
**********************
list() 函數用于在一次操作中給一組變量賦值。
list只能認識下標(key)為數字的,自定義的字符串key是無法使用list來識別的
$a = array('aaaa','bbbb','cccc','dddd');
list($var1,$var2,$var3,$var4) = $a;
echo $var4;//打印了dddd
------------------------------2016.9.22-----------------------------------
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 數組排序
一、這些是正向排序:
(1)sort()函數可以將數據按字母順序和按數字順序排序
(2)當數組內既可以是數字又可以是字符串的時候,就可以加參數,如下:
$numbers = array(2,12,13);
//當數字
sort($numbers,SORT_NUMBER);
//當字符串
sort($numbers,SORT_STRING);
(3)如果想保持原始key就使用asort(): ? asort($numbers);
(4)根據key來排序就是使用: ? ?ksort($numbers);
(5)把數組打亂隨機排序: ?shuffle($numbers);
二、反向排序就在前面加個r,如下:
rsort(); ?、arsort(); 、 krsort();
三、將原來的數組反向排序,但要新建一個數組,操作如下:
$numbers = (1,4,2,6,3);
$a =array_reverse($numbers);
print_r($a);
//打印結果: 0=>3, 1=>6, 2=>2, 3=>4, 4=>1
四、在數組開頭和結尾插入和刪除數據、取數組中的隨機數可以設置個數
(1)開頭:array_unshift($numbers,'100');
(2)刪除開頭元素
array_shift($numbers);
(3)結尾:array_push($numbers,'1001'');
(4)刪除結尾元素
array_pop($numbers);
(5) array_rand(數組名,隨機的個數)? ? ? ? ? 函數從數組中隨機選出一個或多個元素,并返回:
$userNames = array('aaaa','bbbb','cccc');
$a = array_rand($userNames,2);? //只隨機key
echo $userNames($a[0]); //根據$a傳來的key輸出第一個隨機數
echo $userNames($a[1]); //輸出第二個隨機數
五、數組的指針操作
(1)獲取指針的當前元素,不會將指針移到下一步: current() ? 有個別名: pos()
(2)獲取指針的當前元素,將指針移到下一步: each()
(3)一開始就指下一步: next()
(4)將指針指向第一個單元: reset()
(5)講數組指針倒回一位: prev()
(6)count()和sizeof()都是統計數組下標個數
(7)統計數組中所有的值出現的次數: array_count_values()
? ?便于理解,例如:
? ?$a = array(1,2,3,12,1,2);
? ?array_count_values($a);
? ?//結果:1=>2 ,2=>2,3=>1,12=>1
(8)通過標量函數將字符串鍵(key)設置成變量,然后將值賦給了這個變量: extract()
? ? $fruits = array('a'=>'apple','b'=>'banner','c'=>'orange');
? ? extract($fruits);
? ? echo $a,$b,$c;//將數組中key賦值給變量$a,$b,$c
*******************************
函數命名
1.函數名不能和已有的函數名重名
2.函數名只能包含字母、數字和下劃線
3.函數名不能以數字開頭
變量名相同,函數按引用(&)函數內的值就可以改變函數外面的值
不推薦使用:函數沒有參數時就不能引用了,可以將變量在函數內設置成全局變量(global $a;)
使用超級全局變量(說白了就是數組):$GLOBALS['a']=5;
include_once ' '; ? :引入文件
**********************************
? ? ? ? ? ? ? ? ? ? ? ?字符串函數
一、字符串格式化
(1)echo trim('? ? ? ? ? ? ? php? ? ? ? ? ? ');
//trim():清除兩邊多余的空白
echo ltrim('? ? ? ? ? ? ? php? ? ? ? ? ? ');
//ltrim():清除左邊的空白
echo rtrim(' ? ? ? ? ? ? ? php ? ? ? ? ? ? ');
//rtrim():清除右邊的空白 ?別名:chop()
(2)轉換特殊字符:htmlspecialchars();
(3)對即將插入數據庫的字符串,把有問題的字符處理一下:addslashes();
? ? 如果要把這個字符拿出來,就要去除處理:stripcslashes();
(4)將英文字符串轉換為大寫: strtoupper();
? ? 將英文字符串轉換成小寫: strtolower();
? ? 將第一個英文字母轉換為大寫: ucfirst();
? ? 將每個單詞第一個字母轉換為大寫: ucwords();
(5)填充字符串的右側,到 30 個字符的新長度:
<?php
? ? $str = "Hello World";
? ? echo str_pad($str,30,".");//打印Hello World...................
?>
------------------------------2016.9.24-----------------------------------
二、操控字符串
切割和組合函數:
(1)explode():使用一個字符串分割另一個字符串(返回的是數組)
//第一個參數是分割字符串,第二個參數是要被分割的字符串
$email = 'laijingfeng@126.com';
$email_array = explode('@',$email);
(2)implode()或join():組合
$email = 'laijingfeng@126.com';
$email_array = implode('@',$email);
strtok()函數一次只從字符串去除一些片段(稱為令牌)。對于一次從字符串中取出一個單詞的處理來說,strtok()函數比explode()函數的效果更好
$str = 'I,will.be#back';
$tok = ?strtok($str,',.#');
while($tok){
? ? ? ? ?echo $tok.'<br/>';
? ? ? ? ?$tok = strtok(',.#');
}
------------------------------2016.9.25-----------------------------------
(1)substr()函數:允許我們訪問一個字符串給定起點和終點的字符串。
$str = 'laijingfeng@126.com';
//中間的參數表示開始的位置,最后一個參數,是取出的個數
echo substr($str,0,5);
//打印結果:laiji
(2)分解字符串:str_split()返回一個數組,其中各數組元素分別是字符串參數中的一個字符串
//一個個字節拆開,中文不太適合
print_r(str_split('This is a Teacher!'));
(3)逆置字符串:strev()可以將一個字符串逆反過來。
//不太適合中文
echo strrev(This is a Teacher!);
三、字符串的比較
(1)strcmp():比較兩個字符串,等于就返回,第一個大于第二個就返回正數,第一個小于第二個就返回一個負數,這個函數區分大小寫。
(2)strcasecmp():除了不區分大小寫之外,其他和strcmp()一樣
(3)strnatcmp():不區分大小寫,并且按照自然排序
(4)strnatcasemp():區分大小寫,并且按照自然排序
(5)strspn():求兩個字符串之間相同的部分
//后面兩個數字的參數,是從第幾位開始,取多少位
echo strspn('lai','laijingfeng@126.com',0,3);//打印3
四、字符串的替換
(6)strlen():字符串的長度
echo strlen('hello');//打印5
(7)substr_count():字符串出現的頻率
echo substr_count('laijingfeng@126.com','i');//打印出現2
(8)strstr():從指定的字符串開始輸出之后的字符串,別名:strchr()
echo strstr('laijingfeng@126.com','@');//打印@126.com
(9)stristr():比strstr()多了一個不區分大小寫,其他一樣
echo stristr('laijingFeng','f');//打印Feng
(10)strpos():查找某字符串最先出現的位置
echo strpos('laijingfeng@126.com','g');//打印6
(11)strrpos():最后出現的位置
echo strrpos('laijingfeng@126.com','g');//打印10
(12)str_replace():字符串取代
//第一個參數表示要查找的字符串,第二個表示替換成的,第三個是目標
echo str_replace('Lee','Wq','This is Lee!');
(13)substr_replace():指定位置替換
//參數二是替換成,參數3是開始位置,參數4是取幾個出來
echo substr_replace('laijingfeng@126.com','***','0','5');
五、處理中文字符
(1)mb_strlen 對應的函數為strlen() ?求字符串的長度
echo mb_strlen('我是賴勁峰','UTF8');//打印4(原本是8個字符)
(2)mb_strstr 對應的函數,為strtr() 求某字符串到結尾的字符(取中文區別不大)
(3)mb_strpos 對應的函數為strpos() 求出字符最先出現處
echo mb_strpos('我是賴勁峰','是','0','UTF8');//打印1
(4)mb_substr 對應的函數為substr() 取出指定的字符串
echo mb_substr('我是賴勁峰','1','2','UTF8');//打印是賴
(5)mb_substr_count() 對應的函數為substr_str() 返回字符串出現的次數(取中文區別不大)
------------------------------2016.9.26-----------------------------------
一、正則表達式語法(Perl風格)
//第一個參數,表示模式,表示匹配模式(就是和字符串去比較、匹配)
//第二個參數,表示字符串
//如果整個函數模式和字符串比較后匹配了,那么返回真(true)1,否則返回假(false)0
//按照什么規則??按照模式來匹配,只有模式全部通過,那么就通過
//*********匹配和相等是兩個概念,只要字符串中包含規則模式就匹配
$mode = '/php/';//規則模式
$string = 'sdphpas';//字符串
if(preg_match($mode,$string)){
? ?echo '匹配';
}else{
? ?echo '不匹配';
}//打印匹配
二、正則表達式中的元素
包含三種元素:量詞、元字符、修飾符
(1)量詞(使用在規則模式)
+號的意思,是前導字符,一個或者多個
$mode = '/ph+p/';//規則模式
*號雖然可以是零個,但是前導字符不能更改,更改了,就不匹配了
$mode = '/ph*p/';//規則模式
?號零個和一個,多個前導字符就不行
$mode = '/ph?p/';//規則模式
.的意思是,任意一個字符,所以,兩個點,就是任意兩個字符
$mode = '/ph.p/';//規則模式
.*表示前導任意字符,并且零個或者多個
$mode = '/ph.*p/';//規則模式
p{3}表示,前導必須是3個
$mode = '/ph{3}p/';//規則模式
p{3,5}表示,前導必須是3-5個
$mode = '/ph{3,5}p/';//規則模式
p{3,}表示,前導至少3個p,可以多不能少
$mode = '/ph{3,}p/';//規則模式
$符合,一般加在模式的字符串尾巴上,表示從尾巴開始匹配
$mode = '/php$/';//規則模式
^表示,從開頭進行匹配
$mode = '/^php/';//規則模式
|表示選擇符,有其中的一個就是匹配
$mode = '/php|asp|jsp/';//規則模式
(2)元字符
//[]中括號,是一種正則里的語法
//里面的東西表示任意一個即可
[a-z]表示小寫26個字母中,隨便其中一個
[A-Z]表示大寫26個字母中,隨便其中一個
[0-9]表示任何包含數字0-9的字符串
[abc]表示任何包含小寫字母a、b、c的字符串
[^abc]表示任何不包含小寫字母a、b、c的字符串
[a-zA-Z0-9]表示任何包含a-zA-Z0-9和下劃線的字符串
\w表示任何包含a-zA-Z0-9和下劃線的字符串
\W表示任何沒有下劃線和字母數字的字符串
\d表示任何數字字符,和[0-9]相同
\D表示任何非數字字符,和[^0-9]相同
\s表示任何空白字符
\S表示任何非空白字符
\b表示是否達到了單詞邊界
\B表示是否沒有達到了單詞邊界
\表示正則中的特殊字符
------------------------------2016.9.28-----------------------------------
(3)修飾符
i:完成不區分大小寫的搜索
m:在匹配首內容或者尾內容時候采用多行識別匹配
x:忽略正則中的空白
A:強制從頭開始匹配
U:禁止貪婪匹配,只跟蹤到最近的一個匹配符并結束
------------------------------2016.10.8-----------------------------------
三、Perl風格函數
(1)搜索數組中的相匹配的字符串
preg_grep()函數
(2)搜索模式,最后返回的是真或者假,1或者0來表示
preg_match()函數
電子郵件的小案例:通過拆分的方法分組
$mode = '/([\w\.]{2,255})@([\w\-]{1,225}).([a-z]{2,4})/';//模式不能缺少//
$string = 'laijingfeng@126.com';
if(preg_match($mode,$string)){
? ? echo '電子郵件合法!';
}else{
? ? echo '電子郵件不合法!';
}
(3)匹配模式的所有出現
preg_match_all('/php[1-6]/','sdfaphp1asdfasdphp5adsfasdphp8',$out);
//匹配全局正則
print_r($out);//打印結果是php1 php5 php8
(4)定界特殊的正則表達式:它在每個對于正則表達式語法而言有特殊含義的字符前插入一個反斜線
echo preg_quote('PHP的價格是:$150');
(5)(關鍵)替換模式的所有出現:它搜索到所有匹配,然后替換成想要的字符串返回出來。
//搜索匹配的結果,然后替換掉
//第一個參數,放的是正則的模式
//第二個參數,放的是替換掉的字符串
//第三個參數,字符串
echo preg_replace('/php[1-6]/','python','This is php5,this is php4');
//打印 This is python,this is python
(6)解決貪婪問題(例子)
//【】表示括號中的括號,而不是語法【a-z】
//.表示匹配任意字符一個,加上一個*號表示匹配零個或者多個
//用括號分為三組那么第一組就是\1,第二組就是\2,第三組就是\3
//第一個問題:第一個【b】和最后一個【\b】匹配了。
//解決貪婪的方法:U
$mode = '/(\[b\])(.*)(\[\b\])/U';
$replace = '<strong>\2</strong>';
$string = 'This is a [b]php5[/b],This is a[b]php4[/b]';
echo preg_replace($mode,$replace,$string);
(7)以不區分大小寫的方式將字符串劃分不同的元素:preg_split()用來分割不同的元素。
如果沒有【】符號,就表示,要同時滿足
preg_split('/[\.@]o/','laijingfeng@126.com')
------------------------------2016.10.11-----------------------------------
PHP 日期和時間庫
(1)驗證日期:checkdate()函數
(2)格式化時間和日期:data()函數
(3)查看更多時間信息:gettimeofday()函數
(4)將時間戳轉換成友好的值:getdate()函數
(5)獲取當前的時間戳:time()函數
(6)獲取特定的時間戳:mktime()函數
------------------------------2016.10.12-----------------------------------
(7)使用人可讀的字符串轉換成時間戳:strotime()函數
(8)獲取當前文件最后修改時間:getlastmod()函數
(9)獲取當前時區:date_default_timezone_get()函數?
配置默認時區(上海時間):date_default_timezone_set('Asia/Shanghai');
(10)取得本地時間數據,返回一個數組(不好用):localtime()函數
(11)計算頁面腳本運行時間,該函數返回的是時間戳和微秒數:microtime()函數
? ? ? ?表單與驗證
學習要點:1.Header()函數 ? ? ? ? ? ? 2.接受及驗證數據
Header()函數:建議放首行,如果不在首行頁面有部分每起作用,可以啟用緩存區 ob_start()
(1)用于重新導向指定的URL
(2)用于設置頁面字符編碼
------------------------------2016.10.13-----------------------------------
接收及驗證數據
會話控制
學習要點:1.Cookie的應用 ? ? ?2.Session會話處理
一、Cookie的應用
使用Cookie的限制
1.必須在HTML文件的內容輸出之前設置;
2.不同的瀏覽器對Cookie的處理不一致,且有時會出現錯誤的結果
3.限制是在客戶端的。一個瀏覽器能創建的Cookie數量最多為30個,并且每個不能超過4KB,每個WEB站點能設置的Cookie總數不能超過20個。
------------------------------2016.10.16-----------------------------------
Cookie小案例:
二、Session會話處理
上傳文件
學習要點:1.PHP上傳配置 ?2.$_FILES數組 ?3.PHP上傳函數
一、PHP上傳配置
二、$_FILES數組
三、PHP上傳函數
PHP提供了兩個專門用于文件上傳過程的函數:is_uploaded_file()和move_uploaded_file()
文件上傳小練習:
處理圖像
學習要點:1.創建圖像 ? 2.簡單小案例
一、創建圖像
創建圖像:
------------------------------2016.10.17-----------------------------------
加載已有圖像再加上水印:
MySQL數據庫
學習要點:1.Web數據庫概述 ?2.MySQL的操作 ?3.MySQL常用函數
MySQL常用數據類型:
MySQL的操作:
MySQL常用的函數:
SQL語句詳解:
WHERE表達式的常用運算符:
------------------------------2016.10.18-----------------------------------
PHP操作MYSQL
增刪改查:
其他常用函數:
------------------------------2016.10.19-----------------------------------
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?多用戶留言系統
一、樣式:
------------------------------2016.10.31-----------------------------------
OOP:
構造方法、普通方法、析構方法:
------------------------------2016.11.1-----------------------------------
封裝:
常量:
靜態:
instanceof:
public公共的,所以類都可以用。
private私有的,只能本類使用。
protected受保護的,子類可以使用。
繼承和重寫:
封裝后,子類調用父類:
子類重寫方法,并調用父類的方法:
final關鍵字:
抽象類和方法(abstract):
接口(interface):
------------------------------2016.11.2-----------------------------------
抽象類只支持單繼承,接口支持多實現:
到底應該用抽象類還是接口呢?
如果要繼承多個類的方法的規范,那么就用接口好了
如果要共享一個方法體內容,就用抽象類
多態:
使用Mysqli操作數據庫
------------------------------2016.11.20-----------------------------------
1.索引數組取得結果集
$_row = $result->fetch_row();
echo $_row[3];
2.關聯數組取得結果集
$_assoc = $result->tetch_assoc();
echo $_assoc['tg_username'];
3.索引+關聯數組取得結果集
$array = $result->fetch_array();
echo $array[3];
echo $array['tg_username'];
4.使用OOP的方法fetch_object()
執行多條UPDATE的方法
執行三條查詢語句再獲取結果集