小星星的php


大家好,我是小星星,最近新學的php,我迫不及待要跟大家分享了!!come on!一起來看小星星的世界

 

先為大家介紹php基礎

 

首先我們來看看什么叫php:

PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開源腳本語言語法吸收了C語言JavaPerl的特點,利於學習,使用廣泛,主要適用於Web開發領域。PHP 獨特的語法混合了CJavaPerl以及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);

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM