1. 程式人生 > >PHP學習筆記(一)--基礎知識

PHP學習筆記(一)--基礎知識

1、編譯器中出現中文亂碼

如果編輯環境中輸入的中文程式設計亂碼,可以在“Edit”à”Set Encoding”,設定編碼為“GBK”,如下:

如果執行輸出視窗中文為亂碼,則可以右擊工程檔案,”Properties’à”PHP Debug”à”Encoding Setting”,設定為”GBK”(如果下拉選項沒有”GBK”,可以手動輸入),如下:

 

注意:如果頁面及php使用utf-8編碼,則獲取的資料庫資料會變成亂碼,sql server預設編碼為gb2312。

2、變數及註釋

1)註釋

註釋有三種:

//用於單行註釋,註釋內容中不可出現?>

/*  */用於多行註釋

#用於單行註釋

2)變數型別

PHP中有8種變數型別:boolean,integer,float/double,string,array,object,resource和null;

PHP中變數型別不是由程式設定,而是PHP根據程式執行上下文確定;

PHP中變數都是以$符號開頭;

字串變數定義可以使用’(單引號)也可以使用”(雙引號),一般定義字串建議使用單引號,在單引號定義的字串為原生字串,轉義符號不再具有轉義作用,並且變數放在單引號字串中不會將變數替換成實際的數值;

如果定義的數值超過了int所能表示的最大範圍,將會被單做float型別處理。如果表示式運算最後結果超出了int範圍也會返回float型;

可變變數是一種獨特的變數,它允許動態的改變一個變數的名稱,改變數的名稱由另外一個變數的值來確定;

PHP中連線兩個字串使用.(點號),而不能使用+(加號);

如果“+”號兩邊有字元型別,則自動轉換為整型。如果是字母則輸出0,如果以數字開頭的字串,自會擷取字串頭部的數字再進行運算。

 

【例1】變數定義

<?php

    $name='i love php!';

    echo '$name';//輸出$name

    echo "$name";//輸出i love php!

   

    echo "hello\nworld";//\n為轉義字元

    echo 'hello\nword';//\n原樣輸出

   

    $number1=123;//定義十進位制整數

    $number2=0123;//定義八進位制整數

    $number3=0x123;//定義十六進位制整數

    $number4=0.123;//定義浮點數

    $number5=2.3E+3;//$number5=2300

    $number6=2.3E-2;//$number6=0.023

   

    $array1=array('武漢','廣州','南京');//定義一維陣列

    $array2=array(0=>'php',1=>'c#',2=>'java');//定義一維陣列

    echo '<p>';//段樓開始標記

    echo $array1[1];//輸出廣州

    echo '<br/>';//換行符

    echo $array2[0];//輸出php

    echo '</p>';//段落結束標記

   

$num1='5.23r*r';

    $num2=1;

    echo $num1+$num2;//輸出6.23

?>

 

【例2】引用、靜態變數及全域性變數

<?php

    $str1="hello";

    $str2=$str1;//變數賦值

    $str2=& $str1;//引用賦值

    static $name='C#';//靜態變數

   

    $score=80;

    function f(){

       $score=100;

       echo $score.'<br/>';//輸出100

       global $score;//定義全域性變數

       echo $score;//輸出80

    }

    f();//呼叫函式

?>

 

【例3】可變變數

<?php

    $name='wit';

    $wit='hello,word';

    echo $name.'<br/>';//輸出wit

    echo $$name;//輸出hello,word

?>

 

 

3、常用函式

 

函式

說明

is_null()

判斷是否為空,當變數值為null,””(空串)或者0等時返回true

unset()

銷燬指定的變數

settype(mixed var,string type)

將指定的變數轉換成指定的資料型別,settype($num,’integer’)

is_bool()

檢測變數是否為布林型別

is_integer()/is_int()

檢測變數是否為整型

is_float()/is_double()

檢測是否為浮點型

is_array()

檢測變數是否為陣列型別

is_object()

檢測變數是否為物件型別

is_numeric()

檢測變數是否為數字或者由數字組成的字串

var_dump()

輸出變數的相關資訊,$age=12;var_dump($age)輸出int(12)

rand(int mix,int max)

產生一個[mix,max]之間的隨機整數,如果每餐引數則返回[0,RAND_MAX]之間的隨機整數

iconv($in_charset, $out_charset, $str)

轉換編碼,in_charset為原來編碼,out_charset為轉換後的編碼,$str為要轉換的字串

 

4、常量

1)定義常量,語法:

define(string constant_name,mixed_value,case_sensitive=true);

說明:第一個引數為常量名,第二個引數為常量值,第三個引數表示是否對大小寫敏感(可選)。

2)獲取常量的值,語法:

mixed constant(string const_name);

也可以通過常量名直接獲取常量的值.

3)判斷一個常量是否定義,語法:

bool defined(string const_name);

 

示例:

<?php

    define("$PI", 3.1415926);

    if(defined("$PI"))

    {

       echo $PI."<br/>";

       echo constant("$PI");

    }

?>

 

系統預定義的一些常量:

<?php

    echo constant("__FILE__");//輸出PHP檔名

    echo constant(_LINE_);//輸出PHP程式行數

    echo constant(PHP_VERSION);//PHP程式的版本

    echo constant(PHP_OS);//P執行PHP解析器的作業系統名

?>

 

5、運算子

位運算子

運算子

含義

運算子

含義

&

按位與

|

按位或

~

按位非

^

按位異或

<<

左移位

>>

右移位

 

邏輯運算子

運算子

含義

運算子

含義

&&

邏輯與

||

邏輯或

!

邏輯非

xor

邏輯異或

 

比較運算子

運算子

含義

運算子

含義

>

大於

>=

大於等於

<

小於

<=

小於等於

==

等於

!=

不等

===

恆等於

!==

非恆等

$a====$b要求$a與$b的值相等且變數型別相同;$a!==$b表示$a與$b的值不等或者型別不同。

 

錯誤控制符@

示例:

<?php

    $num1=12;

    $num2=$num1/0;//會輸出警告資訊

    [email protected]($num1/0);//不會輸出任何資訊

?>

 

三元運算子?:

示例:

<?php

    $num1=12;

    echo $num1%2==0 ? '偶數' : '奇數';

?>

 

6、定義函式

當函式使用預設引數時,預設引數必須放在非預設引數的後面;

變數函式是通過改變變數名實現的;

對函式的引用必須在兩個地方都使用“&”符,用來說明返回的是引用。

示例:

<?php

    function fun1()

    {

       echo '函式fun1被呼叫';

    }

    function fun2($r){

       return 2*pi()*$r;

    }

    function fun3(& $num){//引數為引用型別

       $num=3;

    }

    function fun4($num1,$num2=2){//帶預設引數的函式

       return $num1+$num2;

    }

    function come(){

       echo '函式come被呼叫';

    }

    function back($name){

       echo "$name";

    }

function &fun5($area){//對函式的引用

       return 2*$area;

    }

    fun1();

    fun2(3);

    $r=1;

    fun3($r);

    echo $r;//輸出3

    $res=fun4(10);

    echo $res;

    $func="come";

    $func();//使用變數函式來呼叫come()

    $func="back";

    $func("lily");//使用變數函式來呼叫back("lily")

$area=&fun5(5);//對函式的引用

unset($area);//取消引用fun5

    echo $area;

?>

注:可以使用unset()方法取消對變數或者函式的引用。

 

7、流控制語句

【例1】if else結構

<?php

    $num=rand(1,3);

    if ($num==1) {

       echo '最小值';

    }

    elseif ($num==2){

       echo '中間值';

    }

    else {

       echo '最大值';

    }

?>

 

【例2】while,do while結構

<?php

    $num=rand(1,3);

    do {

       $num+=1;

       echo $num;

    }while ($num<3);

    echo '<br/>';

    while ($num>3){

       $num-=1;

       echo $num;

    }

?>

 

【例3】switch case結構

<?php

    $num=rand(1,4);

    switch ($num){

       case 1:

           echo '最小值';

           break;

       case 2:

           echo '中間值';

           break;

       case 3:

           echo '最大值';

           break;

       default:

           echo '不合要求';

    }

?>

 

【例4】foreach結構

foreach語法格式:

foreach(array_expression as $value)

foreach(array_expression as $key=>$value)

 

<?php

    $numArray=array(1,2,3,5);

    foreach ($numArray as $num){

       echo $num.';';

    }

    echo '<br/>';

    $name=array("1"=>"智慧機器人","2"=>"數碼相機","3"=>"手機");

    foreach ($name as $key=>$value){

       echo ':'.$key.';:'.$value.'<br/>';

    }

?>

 

【例5】流程控制語句另一種寫法

使用“:”(冒號)代替左邊的大括號“{”,使用endif;、endwhile;、endfor;、endforeach;和end switch;代替右邊的大括號“}”。

 

<?php

    $numArray=array(1,2,3,5);

    for($index=0;$index<count($numArray);$index++):

       echo $numArray[$index].';';

    endfor;

    echo '<br/>';

    $name=array("1"=>"智慧機器人","2"=>"數碼相機","3"=>"手機");

    foreach ($name as $key=>$value):

       echo ':'.$key.';:'.$value.'<br/>';

    endforeach;

?>

 

【例6】使用break、continue跳出迴圈語句

break N;可以跳出N重迴圈

continue N;可以跳出N重迴圈

<?php

    $arr=array("A","B","C","D","E","F","G","H","I","J");

    for($i=0;$i<10;$i++){

       echo '<br/>';

       if($i%2==0){

           continue;

       }

       for($j=0;$j<count($arr);$j++){

           if($i==$j){

              continue 2;

           }

           else {

              echo 'arr['.$j.']='.$arr[$j].' ';

           }

       }

    }

?>

輸出結果為:

 

8、字串操作

  1. 去除空格或特殊字元
  • trim(string str[,string charlist]);     

說明:用於去除首尾空格或特殊字元,如果不設定引數charlist則所有的可選字元都將被刪除

charlist可選值

可選值

說明

可選值

說明

\0

null,空值

\0xB

垂直製表符

\t

ab,製表符

\r

回車符

\n

換行符

“ ”

空格

除了上面的可選值外還尅在charlist引數中設定要去除的自己定義的字元。

 

  • ltrim(string str[,string charlist]);

說明:去除字串左邊的空格和特殊字元

  • rtrim(string str[,string charlist]);

說明:去除字串右邊的空格和特殊字元

 

示例:

<?php

    $value='(:@i love php!#:)';

    echo trim($value,"(:@#:)");//輸出i love php!

    echo '<br/>';

    echo ltrim($value,"(:)");//輸出@i love php!#:)

    echo '<br/>';

    echo rtrim($value,"#:)");//輸出(:@i love php!

?>

 

  1. 轉義與還原字串
  • string addslashes(string str)函式用來轉義字串;
  • striing stripsslashes(string str)函式用來將addslashes()函式轉義後的字串還原。

注:所有資料在插入到資料庫之前應該進行轉義,避免注入式攻擊。

示例:

<?php

    $str="select * from student where name='php'";

    echo addslashes($str);//輸出select * from student where name=\'php\'

    echo stripslashes(addslashes($str));//輸出select * from student where name='php'

    $str2="select * from student where name=\'php\'";

    echo addslashes($str2);//輸出select * from student where name=\\\'php\\\'

    echo stripslashes($str2);//輸出select * from student where name='php'

?>

 

  • string addcslashes(string str,string charlist)

 引數str為要轉義的字串,charlist指定在字串中的哪些字元前加上轉義符“\”,如果charlist中包含\n,\r等字元則將以C風格進行轉換,而其它非字母數字且ASCII低於32或高於126的字元均轉換成八進位制表示。

  • striing stripcsslashes(string str)函式用來將addslashes()函式轉義後的字串還原。

用來將addcslashes()轉義的字串還原。

 

示例:

<?php

    $str="select * from student where name='張三'";

    $res=addcslashes($str,"張三");

    echo $res;//輸出select * from student where name='\325\305\310\375'

    echo '<br/>';

    echo stripcslashes($res);//輸出select * from student where name='張三'

    echo '<br/>';

    $str2=addcslashes($str,"from");

    echo $str2;//輸出select * \f\r\o\m student whe\re na\me='張三'

    echo '<br/>';

    echo stripcslashes($str2);//輸出select * om student whe e name='張三'

?>

注:一般對快取資料的值採用addcslashes()函式進行指定範圍的轉義

 

  1. 擷取字串及比較字串
  • int strlen(string str)獲取字串長度
  • string substr(string str,int start[,int length])

引數

說明

str

指定字串物件

start

指定開始擷取字串的位置。如果引數start為負,則從字串的末尾開始擷取。從0開始計數。

length

可選引數,指定擷取字元的個數,如果為負數,則表示取到倒數第length個字元

注:使用substr()函式擷取中文字串,如果擷取的字串個數是奇數,會導致出現亂碼。

 

示例:

<?php

    $str="I love php";

    echo substr($str, 2,strlen($str)-2);//輸出love php

    echo '<br/>';

    echo substr($str, -3,3);//輸出php,從倒數第3個字元開始擷取,擷取長度為3

    echo '<br/>';

    echo substr($str, 2,-1);//輸出love ph,從第二個開始擷取,取到倒數第1

?>

 

  • int strcmp(string str1.string str2);

如果str1大於str2則返回值大於0,如果str1等於str2則返回值等於0,否則返回值小於0.比較區分大小寫。

 

  • int strcasecmp(string str1.string str2);

與strcmp不同的時,該函式不區分大小寫。

 

  • int strnatcmp(string str1.string str2);

按照自然排序法進行字串的比較。自然排序法比較是字串中的數字部分,將字串中的數字按照大小進行比較。區分大小寫。

 

  • int strncmp(string str1.string str2);

比較字串中的前n個字元。

 

示例:

<?php

    $str1="I love php";

    $str2="I like php";

    echo strcmp($str1, $str2);//輸出1

    echo '<br/>';

    echo strncmp($str1, $str2,3);//輸出0

    echo '<br/>';

   

    $str1="I love php12";

    $str2="I love php3";

    echo strcmp($str1, $str2);//輸出-1

    echo '<br/>';

    echo strnatcmp($str1, $str2);//輸出1

    echo '<br/>';

?>

 

  1. 檢索字串與替換字串
  • string str(string source,string needle);

獲取source中needle首次出現的位置到needel末尾的子字串。如果執行成功返回子字串,否則返回false.區分大小寫

<?php

    $source="I love php";

    $needle="ve";

    echo strstr($source, $needle);//輸出ve php

?>

 

  • mixed  str_ireplace(mixed search,mixed replace,mixed subject[,int &count]);

說明:在subject中使用replace替換search。在替換時不區分大小寫

 

  • mixed  str_replace(mixed search,mixed replace,mixed subject[,int &count]);

說明:在subject中使用replace替換search。在替換時區分大小寫

<?php

    $str="武漢大學";

    $search="武漢";

    $replace="**";

    $result=str_replace($search, $replace,$str);

    echo $result;//輸出**大學

?>

 

  • string substr_replace(string str,string repl,int start[,int length]);

引數說明:

引數

說明

str

要操作的原始字串

repl

指定替換後的新字串

start

指定替換字串的開始位置。正數表示起始位置從字串開頭開始,負數表示起始位置從字串的結尾開始。0表示起始位置的第一個字元

length

可選引數,指定替換字串的長度。預設是整個字串。整數表示起始位置從字串開頭開始,負數表示起始位置從字串的結尾開始。0表示插入而非替換

 

<?php

    $str="武漢某某大學";

    $repl="廣州";

   

    $result=substr_replace($str, $repl,0,8);

    echo $result;//輸出廣州大學,一個漢字佔兩個字元

    echo '<br/>';

    $result=substr_replace($str, $repl, -2,4);

    echo $result;//輸出武漢某某大廣州

   

    echo '<br/>';

    $result=substr_replace($str, $repl, 0,0);

    echo $result;//輸出廣州武漢工程大學

   

    echo '<br/>';

    $result=substr_replace($str, $repl, 0,-4);

    echo $result;//輸出廣州大學

?>

 

  1. 分割與合併字串
  • array explode(string separator ,string str[,limit]);

引數說明:

引數

說明

separator

指定的分割的識別符號,如果separator所包含的值在str中找不到,則返回包含str單個元素的陣列

str

指定要進行分割的字串

limit

可選引數,如果設定了limit引數,則返回的陣列中包含最多limit個元素,而最後的元素將包含str的剩餘部分;如果limit是負數,則返回除了最後的-limit個元素以外的所有元素

 

  • string implode(string glue,array pieces );

 

示例:

<?php

    $str='PHP程式設計@java程式設計@C++語法';

    $arr=explode("@",$str);

    print_r($arr);//陣列有3個元素:PHP程式設計;java程式設計;C++語法

    $res=implode("#",$arr);

    print_r($res);//$res=PHP程式設計#java程式設計#C++語法

?>

 

9、POSIX擴充套件正則表示式函式

  • bool ereg/eregi(string pattern,string str[,array regs])

引數說明:

在字串str中匹配表示式pattern,如果匹配成功返回true,否則返回false。如果有第3個引數,則將成功匹配的字串按子串劃分並存儲到regs陣列中。ereg()區分大小寫,eregi()不區分大小寫。

<?php

    $ereg='^[$][[:alpha:]_][[:alnum:]]*';

    ereg($ereg,'$_name',$register);

    print_r($register);//輸出Array ( [0] => $_name )

?>

 

  • string ereg_replace/eregi_replace(string pattern,string replacement,string str)

在字串str中匹配pattern表示式,匹配成功後替換為replacement,並返回替換後的字串。

 

  • string split/spliti(string pattern,string str[,int limit])

使用表示式pattern分割字串str。如果有引數limit,則返回的陣列中包含最多limit個元素,而最後的元素將包含str的剩餘部分;如果limit是負數,則返回除了最後的-limit個元素以外的所有元素。

 

10、PRICE相容正則表示式函式

  • array  preg_grep(string pattern,array input)

使用陣列中的元素一一匹配表示式pattern,最後返回所有相匹配的元素組成的陣列。

示例:

<?php

    $preg='/\d{3,4}-?\d{7,8}/';

    $arr=array('0131231231','7980009-12312','909-12345678');

    $preg_