大家好,我是小星星,最近新學的php,我迫不及待要跟大家分享了!!come on!一起來看小星星的世界
先為大家介紹php基礎
首先我們來看看什么叫php:
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域。PHP 獨特的語法混合了C、Java、Perl以及PHP自創的語法。它可以比CGI或者Perl更快速地執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標准通用標記語言下的一個應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯后代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。
php支持的動態網站語言:
java----jsp
PHP-----php
asp---——asp
php中常見的服務器:
Apache:Apache公司旗下的服務器,用於解釋php語言,端口號80
Tomcat:Apache公司旗下的另一款服務器,用於解釋jsp文件,端口號8080
http協議的默認端口號是80,所以使用Apache服務器無需輸入端口,可以直接
使用本地的 IP:127.0.0.1或者localhost
常見的數據庫:
Mysql Oracle Access SQLServer..
Mysql是一款開源免費的數據庫軟件,數據庫存儲量上要低於Oracle,但是執行效率上要高於Oracle
PHP系統通常配合Mysql使用,但是php也支持鏈接幾乎所有的主流瀏覽器
B/S和C/S:
1.B/S結構:瀏覽器/服務器結構,用戶只需要通過瀏覽器即可訪問的網站,絕大部分功能集中在后台服務器。
2.C/S結構:客戶端服務器結構,用戶需要安裝軟件客戶端才可以使用的程序,客戶端部分可以分擔一定的操作功能
php的語言標記:一共四種哦
①<?php?> 這個最好哦
②<script language="php"></script>
③<? ?>
④<% %>
php中的變量:
①:php中的變量必須使用$開頭!!
②:php是一種弱類型語言,變量無需聲明,直接給變量賦值即可,並且可以再后續賦值過程中,隨時修改變量的數據類型
③:php中可以使用連等聲明多個變量,而且一定不能用,分割。
eg:$a=$b=$c=10;
PHP中的真假換算(很重要哦):
1 Boolean:true為真false為假;
2。 Integer類型,0為假,非0為真
3. 浮點型 0.0為假,非0.0為真
4.字符串類型 "" "0"為假,其余全為真
5 。Array類型,空數組為假,非空為真
6 Object類型:全為真;(只有PHP4版本中,空對象為假)
7 NULL類型 全為假。
8 Resource類型:全為真。
php中的字符串:
① '';
② "";
③<<<(定界符); $str=<<<s(定界符開始)
//定界結束符必須頂格寫, 而且一行中不能有任何其他內容,包括空格;
//定界標識符可以是任何字母,只要保證開始符和結束符一致即可;
s;(定界符結束)
④三種聲明方式的區別:
a:''中不能解析變量,而雙引號可以解析變量。
注意:雙引號中,如果解析變量,需要將變量與后面內容隔開,或者用{}包裹。
eg:"haha{$num}haha" "haha${num}haha" 兩種寫法均可
b: ''中不能使用轉義符(除了\\和\'之外)雙引號中可以使用所有轉移符;
c ''中可以有雙引號,雙引號中可有單引號,但是不能包裹同類型引號
d 定界符所有功能,與雙引號相同.(但是,定界符中還可以有雙引號)
php中的數據類型轉換:
1 自動類型轉換,表示運算的時候,Boolean null String等類型會自動轉為Integer或Float類型
Null-->0 false-->0 true-->1
String轉第一個非數值字符前面的數 "123a"-->123 "a123"-->0
2 強制類型轉換:根據我們的需要,強制將變量轉化為其它類型。
②:使用()聲明新類型強轉
$新變量=(新類型)$原變量; $str=(String)1
//新類型的名稱可以使用全拼。也可以使用縮寫 Integer/Int Boolean/bool 是一個意思
(Integer)(int)---整形* (float)(double)(real)--浮點型
(String)--字符串* (Boolean)(bool)--布爾型
(Array)---數組
(object)--對象
②:使用settype()進行強轉;
bool settype(minxed var,String NewType);
第一個參數是任何類型的變量,第二個參數是字符串類型的新數據類型
返回值是Boolean類型,表示轉換是否成功!
③:兩種強轉的區別;
第一種 是將轉換之后的結果賦值給新變量;
第二種 是直接修改掉原變量的數據類型
php中判斷函數數據類型的常用函數:
is_bool():判斷是否是布爾型
is_int()、is_integer()和is_long():判斷是否為整型。
is_float()、is_double()和is_real():判斷是否為浮點型
is_string():判斷是否為字符串
is_array():判斷是否為數組
is_object():判斷是否為對象
is_resource():判斷是否為資源類型
is_null():判斷是否為null
is_scalar():判斷是否為標量
is_numeric():判斷是否是任何類型的數字和數字字符串
is_callable():判斷是否是有效的函數名
php中的運算符:
1 算術運算符
+ - * / ++ --
$a=22/"2.2a";
+:只有加減運算的功能,在進行加減運算時,如果兩邊有非數值類型,則會自動將非數值類型轉為數值類型
2 賦值運算符 = += -= *= /= %= .=(連接字符串)
3 比較運算符
> < >= <= == === != <>(不等於) !==
==:不要求數據類型相等,只要求轉換之后的結果相同;
===:要求值和數據類型必須都相等;
4邏輯運算符:
&& and || or !
&&和||:進行運算的時候會發生短路,當左側能夠判斷出結果時,將直接返回結果,而不運行右側(&& 左假即假 ||左真即真)
xor:邏輯異或 兩邊只有一個true,結果為TRUE,兩天同為true或者同為false,結果為false
5 位運算符
將10進制的數,轉為二進制,進行按位運算,運算完以后在轉回10進制
&:按位與, 兩個都為1 結果為1
|:按位或, 有一個1 結果為1
^:按位異或, 兩個不相同時, 結果為1
(一個數異或自身,結果為0,一個數異或0,結果為其自身)
<<:左移 轉為2進制后,左移幾位,右邊空余位補0
num<<n 相當於num *2^n
>>:右移,轉為2進制后,右移幾位,左邊空余位補0
num>>n 相當於num/2^n(小數取整)
6 其他運算符
?:三元運算符. ?前面為true,則執行:前面的,否則執行:后面的
``:可以直接用系統命令執行中的相關指令並執行,但是,由於不同平台的的指令不一致,
以及安全性問題,這個符號我們並不支持使用,eg: 'ipconfig'
@:錯誤信息的控制符,可以屏蔽掉網頁中出現的一些小錯誤信息,,但是,並不提倡使用
echo @$f //未定義 會產生Notice級別的提示,可以使用@屏蔽
php流程控制語句:
1continue:跳出本次循環繼續進行下一次
2 break 跳出本層循環,繼續執行循環后面的的語句,
php中,continue和break后面可以接數字表示跳過幾層循環或者switch,
3 return 結束當前函數,並返回值,如果沒有函數包裹,return也能終止當前腳本,但是一般不使用return終止腳本
4 exit()die():結束當前腳本,並且打印一句話
exit("再見");
基礎就這么多,下面來介紹函數
函數的聲明與使用:
1、標識符:程序中各變量名、屬性名、方法名、函數名、類名統稱為標識符
①:標識符的命名要求
只要是標識符,命名只能有字母數字下划線組成,開頭不能是數字
②:標識符的命名規范:
類名:要符合“大駝峰法則”。每個單詞的首字母全部大寫!PersonName
其他標識符,符合“小駝峰法則”,首字母小寫,之后每個單詞的首字母大寫 myNameIsJredu
或者“匈牙利命名法”所有字母小寫,單詞之間用下划線分割。my_name_is_jredu
函數名的要求:
①:函數名也是標識符之一,符合標識符的要求與規范
②:函數名不區分大小寫
③:函數名與已有函數名重復,不能與系統內置函數名重復
④:bool function_exists(String funName);用於檢測函數名是否存在
php中變量的作用域:
1 局部變量:聲明在函數內部的變量,稱為局部變量,只能在函數內部使用,如果要在外部使用,使用return關鍵字將函數返回
2聲明在函數外面的變量稱為全局變量
3 注意:php中,全劇范圍不能訪問局部變量,局部范圍也不能訪問全部變量
如果要在函數中使用全局變量,則需要使用global關鍵字將全局變量引入
函數中如果需要有變量與全局變量重名,global語句之上,使用局部變量,global語句之下,使用全局變量
4 GLOBALS[] 全劇數組
$GLOBALS[]數組是php中的全局數組,可以直接給數組添加鍵和值,無論在函數內外聲明,均可以在任何地方使用;
eg:$GLOBALS['name']="jianghao";
//無論哪里聲明,在任何地方均可使用$GLOBALS['name']
5 函數中需要使用局部變量使用全局變量,還有一種方式,叫做【函數傳參】,可以將全局變量通過函數的參數傳入,但是傳進來的參數是函數的形參,也就是
函數內部的局部變量,這個變量與全局變量實際上是2個變量,內部改變,全部變量不會變;
如果需要在函數內部改變全局變量,可以將形參聲明為取址形式
function func($a1,&$a2){} //函數內修改a1,全局的a1不會改變,函數內修改a2,函數的a2也會改變
注意:如果函數的形參為取址形式,則調用時必須傳入變量,而不能是字面量,例如上面的函數調用, func($a1,$a2);√ func($a1,2)×
因為字面量,不能內存中的變量,無法取地址。
6 php中子函數也無法使用父函數中變量。
如果子函數要使用父函數的變量,可以將子函數作為變量函數使用, 同時配合use關鍵字將父函數的變量傳入子函數;
function func(){
$a=10;
$func=func() use($a){
echo $a;
}
}
use關鍵字只能配合變量函數使用,可以將子函數作為函數的表達式使用,同時匹配合use關鍵字將父函數的變量傳入子函數
函數中參數的傳遞:
在php中如果有參數的傳遞,實參只能比形參多,不能比形參少!!
①:常規參數傳遞: function func($a){} func(123);
2 引用參數傳遞 : function func(&$a){} func($b) ;
①:通過&傳遞進來的是實參的地址,所以函數內部改變形參,外部的實參也會改變
②:如果形參為引用參數,那么實參必須是變量,而不能是字面量,因為字面量沒有地址!!(func10); ×
3 默認參數傳遞: function func($a,$b=10){} func(12);
//$b可以不傳,默認為10;
注意:如果參數中有默認參數,擁有非默認參數,則需要將所有的非默認參數放在后面,所有的默認參數放在后面
4可變參數傳遞,由於php中實參可以比形參多,那么,傳遞進函數的參數可以通過php的內置函數取到相關數據
func_get_args();返回數組的格式,去到所有的實參列表
func_num_args();返回實參列表總個數,count(func_get_args());
func_get_arg(0);傳入index,取到第幾個參數 func_get_args()[0]
例如:
function func3($a,$b=10){ $arr=func_get_args(); var_dump(func_get_args()); var_dump(func_num_args()); var_dump(func_get_args(0)); var_dump(count($arr)); } func3();
變量函數:
1 將一個函數名,作為一個字符串,賦值給一個變量,這個變量,就是我們所說的變量函數,可以直接使用()調用變量函數。
function func(){}
$a="func";//$a就是變量函數
$a();
function func4(){ } $func4=func; $func4(); var_dump($func4);
自定義回調函數:我們用前面的知識來做一個大題
function filter($start,$end,$func){ for($i=$start;$i<=$end;$i++){ if($func($i)){ echo "{$i}<br>";
//傳參,for循環 } } } // filter(1,100); filter(1,100,function($a){ if($a%5==0 && $a%3!=0){ return true; }else{ return false; } }); function func2($a,$b){ } func2(1,2,3,4); function func(){ $a=0; static $a=0; echo $a; $a++; } func(); func(); func(); func(); func(); func();
匿名函數:
由於變量函數,存在兩種調用方式,例如func() $func()
無法保證調用方法的統一,所以,變量函數通常使用匿名函數的方式進行
$func1=function(){};
!!!注意使用匿名函數表達式,最后的分號一定不能省略!
匿名函數。本身也是變量,用var_dump檢測,是Object類型;
$func1=function(){};
var_dump($func1);
看看打印后返回什么:
我們來做一個練習題吧!求取10以內的數階乘:
function func($num){ static $jie=1;
//static叫做靜態變量
使用static關鍵字聲明的變量,稱為靜態變量,static $a=0;
靜態變量的特點:
①:靜態變量在函數第一次加載時進行聲明;
②:靜態變量在函數調用完成后,不會被釋放,靜態變量在整個腳本執行完成后;釋放變量
③:同一個函數多次調用,共享同一個靜態變量
if($num>0){ $jie *= $num; $num--; func($num); } return $jie; } var_dump(func(10));

php中的數組
php中數組的分類:
按照下標的不同,php中的數組分為關聯數組和索引數組
索引數組,下標為整數類型,從0開始,依次增長;
關聯數組,下標為字符串類型,每個下標的字符串與數組中的值一一對應(類似對象中的鍵值對)
兩個數組有什么區別呢!小編總結以下五條:
關於關聯數組跟索引數組
①:同一個數組中,可以同時存在關聯項和索引項
array(1,2"name"=>zhangsan)
②:如果數組中同時存在關聯項跟索引項,則索引下標會去掉關聯項后,默認增長(關聯項不占索引位)
array(1,2,"name"=>zhangsan,3,4);//1,2,3,4的下標依次為0,1,2,3
arr=[];//字面量方式聲明數組從php.4開始支持
③:如果關聯項的key是十進制的整形,則會將此數字轉為索引下標,
("10.0","08"等格式,不會轉為索引下標仍然為關聯數組)
$arr4=array(1,2,"name"=>"zhangsan","5"=>3,"07"=>4);//1,2,3,的下標依次為0,1,5
4依然為關聯項,key為"07"
④:如果手動指定索引下標,則后續索引的增長,將從指定的最大下標開始
array(1,2,"name"=>"zhangsan","5"=>3,4);//4的下標為6
⑤:如果手動指定索引項的下標,或關聯項的key與前面的已有下標混合或者key重復,則后指定的會覆蓋前面指定的
array(1,"name"=>"zhangsan","0"=>3,"name"=>4);
//數組最終第0項為3,name=>4
寫法:
//索引數組
$arr=[];
$arr1=array(1,2,3,4,5,6);
var_dump($arr1);
print_r($arr1);
//關聯數組,用=>表示鍵值對的關聯
讓我們用幾個栗子來驗證以上學法是否正確:
$arr2=array("name"=>"zhangsan","age"=>14,"sex"=>"男"); var_dump($arr2);
echo $arr2["name"];
$arr3=array(1,2,"name"=>"zhangsan",3,4); var_dump($arr3);
//如果數組中同時存在關聯項跟索引項,則索引下標會去掉關聯項后,默認增長!!符合上述第二條
$arr4=array(1,2,"name"=>"zhangsan","5"=>3,"07"=>4); var_dump($arr4);
//如果關聯項的key是十進制的整形,則會將此數字轉為索引下標,
("10.0","08"等格式,不會轉為索引下標仍然為關聯數組)
所以:$arr4=array(1,2,"name"=>"zhangsan","5"=>3,"07"=>4);//1,2,3,的下標依次為0,1,5
$arr5=array(1,2,"name"=>"zhangsan","5"=>3,4); var_dump($arr5);
//如果手動指定索引下標,則后續索引的增長,將從指定的最大下標開始
array(1,2,"name"=>"zhangsan","5"=>3,4);//4的下標為6
$arr6=array(1,"name"=>"zhangsan","0"=>3,"name"=>4); var_dump($arr6);
如果手動指定索引項的下標,或關聯項的key與前面的已有下標混合或者key重復,則后指定的會覆蓋前面指定的
array(1,"name"=>"zhangsan","0"=>3,"name"=>4);
//數組最終第0項為3,name=>4
數組聲明的方式:
使用Array()聲明:但是沒有new關鍵字
$arr=array(1,2,3);
使用字面量[]聲明,這種聲明從php5.4開始支持
$arr=[1,2,3];
直接賦值聲明:php中數組,可以直接使用$arr[]=n;在數組中最后追加一個值,類似push方法。
追加的值的下標,與前面的要求一樣,按照下標最大值進行遞增
$arr[]=1; $arr[]=2; $arr[8]=3; $arr[]=4; $arr[4]=5; $arr[]=6; var_dump($arr); //數組下標的讀取,php中數組下標的讀取,支持使用[]和() var_dump($arr[0]); var_dump($arr[8]);
$arr[]=1;
$arr[]=2;
$arr[8]=3;
$arr[]=4;
$arr[4]=5;
$arr[]=6;
var_dump($arr);
//數組下標的讀取,php中數組下標的讀取,支持使用[]和()
var_dump($arr[0]);
var_dump($arr[8]);
【多維數組】
如果一個數組中的值,依然為數組,那個這個數組就是多維數組
2 多維數組,並不要求每個項都是數組,嵌套一般不超過3層
$class=[ "name"=>"h51705", "count"=>"28", "grounp1"=>array("zhangsan","lisi","wangermazi"), "grounp2"=>array("zhangsan","lisi","wangermazi"), "grounp3"=>array("zhangsan","lisi","wangermazi"), "grounp4"=>array("zhangsan","lisi","wangermazi"), "grounp5"=>array("zhangsan","lisi","wangermazi") ]; var_dump($class);

便利數組:
[使用for循環便利數組]
count($arr);函數用於統計數組中的元素個數
for:循環只能用於便利索引數組,如果包含關聯數組,則count()會統計兩種數組的總個數,到時for循環時會出現“數組下標越界”的錯誤
$arr=[1,2,3,4,5,"name"=>"張三"]; for($i=0;$i<count($arr);$i++){ echo $arr[$i]."<br>"; }
2 foreach便利數組
foreach可以便利任何類型的數組!!
$arr1=[1,2,3,4,5,"name"=>"張三"]; foreach($arr1 as $item){ echo "{$item}<br>"; } $arr1=[1,2,3,4,5,"name"=>"張三"]; foreach($arr1 as $key=>$value){ echo "{$key}=>{$value}<br>"; }
使用list()/each()/while()便利數組
list():用於將數組中的每一個值賦給list函數的每一個參數。(list函數的參數個數,不能大於數組中元素的個數)
eg: list($a,$b,$c)=$arr;
--->$a=1; $b=2; $c=3;
注意:①:list()在解析數組的時候只能解析索引數組;
②:list()可以通過索引參數選擇性的解決數組的值;
list($a,$b,,$c)=[1,2,3,4];==>$c=4
$arr=[1,2,3,4]; list($a,$b,$c,$d)=$arr; echo $a."<br>"; echo $b."<br>"; echo $c."<br>"; echo $d."<br>";

each():函數的作用
each():用於返回數組當前的指針所在的位的鍵值對,並將指針后移一位;
"返回值":如果指針有下一位,則返回一個數組,數組包含一對關聯項
("key"--鍵 "value"--值)和一個索引項(0--鍵 1--值)
如果指針沒有下一位,返回false
$arr1=["name"=>"zhangsan",2,3,4]; // each ($arr1); var_dump(each($arr1)); var_dump(each($arr1)); var_dump(each($arr1));
使用while循環,配合each進行便利
while($a=each($arr1)){ echo "{$a[0]}==>{$a[1]}<br>"; echo "{$a['key']}==>{$a['value']}<br>"; } reset($arr1);//將數組指針恢復到最初位置 while(list($key,$value)=each($arr1)){ echo "{$key}==>{$value}<br>"; } reset($arr1); var_dump($arr1);