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、字串操作
- 去除空格或特殊字元
- 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!
?>
- 轉義與還原字串
- 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()函式進行指定範圍的轉義
- 擷取字串及比較字串
- 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/>';
?>
- 檢索字串與替換字串
- 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;//輸出廣州大學
?>
- 分割與合併字串
- 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_