php是一種服務(wù)器端解釋的腳本語(yǔ)言讳癌。
什么是PHP
PHP是一種服務(wù)器端腳本語(yǔ)言飘痛,他是專門為Web而設(shè)計(jì)的汽绢。
第一篇 使用PHP
連接操作符(.)將其編寫在一行代碼中。
1.3在html中嵌入PHP
服務(wù)器端腳本語(yǔ)言:PHP腳本在Web服務(wù)器上被解釋和執(zhí)行卷玉,這與在用戶機(jī)器上的Web瀏覽器中解釋并執(zhí)行哨颂。
的JS及其他客戶端技術(shù)是不同的。
1.3.2
echo 語(yǔ)句:將傳遞給其自身的字符串打印到瀏覽器窗口中相种。
在雙引號(hào)內(nèi)威恼,用一個(gè)字符串的內(nèi)容代替一個(gè)變量的操作就是插值。
echo “$tirequly tires<br />”;
單引號(hào)寝并, echo $tirequly 'tire<br />';
在單引號(hào)中箫措,變量名稱,或者任何其他文本都會(huì)不經(jīng)修改而發(fā)送給瀏覽器衬潦。
1.5.3 變量和文本
在示例腳本中斤蔓,每一個(gè)echo語(yǔ)句中連接在一起的變量和字符串是完全不同的。變量是表示數(shù)據(jù)的符號(hào)
字符串是數(shù)據(jù)本身镀岛。
三種字符串類型: 具有雙引號(hào): 其中變量會(huì)被替代
單引號(hào):文本值
heredoc語(yǔ)法(<<<)弦牡,通過(guò)制定一個(gè)用來(lái)結(jié)束字符串的結(jié)束標(biāo)記。
echo <<<theEnd
line1
line2
line3
theEnd
1.6 理解標(biāo)識(shí)符
標(biāo)識(shí)符是變量的名稱漂羊。
他不要求在使用變量之前聲明變量驾锰。當(dāng)?shù)谝淮谓o一個(gè)變量賦值時(shí),你才創(chuàng)建了這個(gè)變量走越。
1.7 檢查變量類型
1.7.1 變量類型
特殊的類型:NULL和resource
NULL:沒有被賦值椭豫、已經(jīng)被重置或者被賦值為特殊NULL的變量
resource: 特定的內(nèi)置函數(shù)(例如數(shù)據(jù)庫(kù)函數(shù))將返回resource類型的變量。他們都代表
外部資源(例如數(shù)據(jù)庫(kù)連接),基本上不能直接操作一個(gè)resource變量赏酥,但是它通常被函數(shù)
返回喳整,而且必須作為參數(shù)傳遞給其他函數(shù)
1.7.2 類型強(qiáng)度
弱類型語(yǔ)言,或者動(dòng)態(tài)語(yǔ)言今缚。
1.7.3 類型轉(zhuǎn)換
$abc=(float)$bdc;
1.7.4 可變變量
可變變量允許我們動(dòng)態(tài)地改變一個(gè)變量的名稱算柳。
原理:用一個(gè)變量的值作為另一個(gè)變量的名稱低淡。
$varname='tireqty';
$$varname=5; 等價(jià)于 $tireqty=5;
1.8 聲明和使用常量
define('TIREPRICE',100);
常量由大寫字母組成姓言。
使用時(shí)無(wú)$符號(hào)。
echo TIREPRICE;
了解預(yù)定義常量: phpinfo()函數(shù)蔗蹋。
1.9 理解變量的作用域
1.內(nèi)置超級(jí)全局變量可以在腳本的任何地方使用和課件
2.變量何荚,一旦被聲明,將可以在全局可見猪杭;也就是說(shuō)餐塘,他們可以在函數(shù)內(nèi)外使用。
3.在一個(gè)腳本中聲明的全局變量在整個(gè)腳本中是可見的皂吮,但不是在函數(shù)內(nèi)部戒傻。
$_GET和$_POST數(shù)組,這些被稱作超級(jí)全局變量蜂筹,可以在任何地方使用和可見
1.10 使用操作符
若類型轉(zhuǎn)換需纳,是字符串轉(zhuǎn)換成數(shù)字,如果其中包含‘e’和’E‘字符艺挪,它就會(huì)被當(dāng)做是科學(xué)
表示法并被轉(zhuǎn)換成浮點(diǎn)數(shù)不翩。PHP會(huì)在字符串開始處尋找數(shù)字,沒找到麻裳,則為0.
1.10.2 字符串操作符
. 連接符
1.10.3 賦值操作符
4.引用操作符
&可以在關(guān)聯(lián)賦值中使用口蝠。
請(qǐng)記住,引用就像一個(gè)別名津坑,而不是一個(gè)指針妙蔗。都指向內(nèi)存相同的地址。
可以通過(guò)重置來(lái)改變所指向地址: unset($a);
1.10.4 比較操作符
=== 恒等操作符疆瑰, 操作數(shù)相等并且具有相同的數(shù)據(jù)類型
1.10.5 邏輯操作符
$a x or $b 異或灭必, 不同為true, 同為false.
1.10.6 位操作符
1.10.7 其他操作符
new和->,他們分別用來(lái)初始化類的實(shí)例和訪問(wèn)類的成員乃摹。
錯(cuò)誤抑制操作符
@可以在任何表達(dá)式前面使用禁漓,即任何有值的或者可以計(jì)算出值的表達(dá)式之前。
$a=@(57/0)
如果沒有@孵睬,這一行代碼將產(chǎn)生一個(gè)除0警告播歼,若使用@會(huì)被抑制。
如果使用這種方法抑制了一些警告,一旦遇到一個(gè)警告秘狞,就要寫一些錯(cuò)誤處理代碼叭莫。
如果啟用了php配置文件中的track_errors特性,錯(cuò)誤信息將會(huì)被保存在全局變量$php_errormsg中烁试。
3.執(zhí)行操作符雇初。
執(zhí)行操作符實(shí)際上是一對(duì)操作符,是一對(duì)反向單引號(hào)减响。(``)
php將試著將反向單引號(hào)之間的命令當(dāng)做服務(wù)器端的命令行來(lái)執(zhí)行靖诗。表達(dá)式的值就是命令的執(zhí)行結(jié)果。
4.數(shù)組操作符
數(shù)組操作符([])允許訪問(wèn)數(shù)據(jù)元素支示。 也可以使用=>操作符刊橘。
5.類型操作符
只有一個(gè)類型操作符:instanceof:檢查一個(gè)對(duì)象是否是特定類的實(shí)例。
1.13 使用可變函數(shù)
1.13.1 測(cè)試和設(shè)置變量類型
使用gettype(),傳遞一個(gè)變量颂鸿,他將確定變量的類型并且返回一個(gè)包含類型名稱的字符串促绵。
1.13.2 測(cè)試變量狀態(tài)
isset():若存在,則返回true.
empty():它的值是否為非空和非0.
1.13.3 變量的重解釋
可以通過(guò)調(diào)用一個(gè)函數(shù)來(lái)實(shí)現(xiàn)轉(zhuǎn)換變量數(shù)據(jù)類型的目的嘴纺。
intval(var,int base) base 為進(jìn)制
intfloat(var)
strval(var)
1.14 根據(jù)條件決策
條件結(jié)構(gòu)和重復(fù)結(jié)構(gòu)
1.14.3 else語(yǔ)句
1.15.2 for和foreach循環(huán)
for($i=1;$i<=$numname;$i++){
$temp=$name$i;
echo $$temp.'
';
}
1.16 從控制結(jié)構(gòu)或腳本中跳出
switch break
for continue;
結(jié)束整個(gè)php腳本的執(zhí)行败晴,可以使用exit語(yǔ)句。
eg:
if($totalqty==0){
echo 'exit
';
exit;
}
1.17 使用可替換的控制結(jié)構(gòu)語(yǔ)法
endif\endswitch\endwhile\endfor\endforeach
eg:
if($toatl>0):
exit;
endif;
1.18 使用declare栽渴。
php的另一個(gè)控制結(jié)構(gòu)是declare結(jié)構(gòu)尖坤,他沒有像其他結(jié)構(gòu)一樣在日常編程中使用
declare(directive){
//block
}
設(shè)置代碼塊的執(zhí)行命令--后續(xù)代碼如何執(zhí)行的規(guī)則。
第二章 數(shù)據(jù)的存儲(chǔ)和檢索
2.1 保存數(shù)據(jù)以便后續(xù)使用
保存到文件或保存到數(shù)據(jù)庫(kù)
2.2 存儲(chǔ)和檢索Bob的訂單
$_POST['address']
在本章中熔萧,我們將所有訂單都寫入同一個(gè)文件中糖驴。
2.3 文件處理
寫入文件
1.打開文件
2.讀取數(shù)據(jù)
3.關(guān)閉文件
2.4打開文件
fopen()函數(shù),參數(shù)指定文件模式佛致,即如何使用它
2.4.1 選擇文件模式
1.打開文件為了只讀贮缕、只寫或讀和寫
2.如果要寫一個(gè)文件,可能希望覆蓋或者追加俺榆。若存在感昼,也可以終止執(zhí)行
3.如果希望在一個(gè)區(qū)分了二進(jìn)制方式和純文本方式的系統(tǒng)上寫一個(gè)文件,還必須指定采用的
方式罐脊。
w
2.4.2 使用fopen()打開文件
$DOCUMENT_ROOT=$_SERVER['DOCUMENT_ROOT'];
$fp=fopen("$DOCUMENT_ROOT/../orders/d.txt",'w');
路徑 模式
DOCUMENT_ROOT代表文檔根目錄定嗓。為了安全,將它放我在文檔樹外部
第一個(gè)參數(shù):路徑
第二個(gè):文件模式
第三個(gè):在include_path中搜索萍桌。 true\false
第四個(gè):遠(yuǎn)程位置打開文件
2.4.3 通過(guò)FTP或HTTP打開文件
2.4宵溅。4 解決打開文件時(shí)可能遇到的問(wèn)題
權(quán)限問(wèn)題:根據(jù)服務(wù)器設(shè)置的不同,該腳本可能是作為web服務(wù)器用戶或者腳本所在目錄的擁有者
運(yùn)行的上炎。
2.5 寫文件
fwrite()或者fputs()
fputs()是fwrite()的別名函數(shù)恃逻。
fwrite($fp,$outputstring);
fwrite()函數(shù)的替換是:file_put_contents(filename,data,int flag,resource context)
2.5.1 fwrite()參數(shù)
fwrite($fp,$outputstring,length);
最大字符數(shù)
strlen()函數(shù):獲取字符串的長(zhǎng)度
2.5.2 文件格式
記錄之間用\n分隔
數(shù)據(jù)域之間用\t分隔
2.6 關(guān)閉文件
fclose($fp);
2.7 只讀模式打開文件 fopen('../a.txt','rb')
2.7.2 知道何時(shí)讀完文件 feof()
while(!feof($fp))
{
$order=fgets($fp,999);
echo $order.'
';
}
feof() 唯一參數(shù)是文件指針,若文件指針指向文件末尾,將返回true
2.7.3 每次讀取一行數(shù)據(jù): fgets() \fgetss()\fgetcsv()
$order=fgets($fp,999);
fgetss(fp,length,[allowable_tags])
它可以過(guò)濾字符串中包含的PHP和HTML標(biāo)記寇损,想留下的寫在allowable_tags里面
fgetcsv()函數(shù): $order=fgetcsv($fp,100,'\t').
以上代碼將從文件中讀取一行凸郑,并且在右制表符(\t)的地方將文件內(nèi)容分行,
返回一個(gè)數(shù)組矛市。
2.7.4 讀取整個(gè)文件: readfile()\fpassthru()和file()
readfile() 可代替前面寫的所有腳本
readfile(pathname,include_path,context);
fpassthru()
$fp=fopen('path','rb');
fpassthru($fp);
file() 結(jié)果發(fā)送到一個(gè)數(shù)組芙沥。
$filearray=file('path');
一行一個(gè)元素保存在數(shù)組中。
2.7.5 讀取一個(gè)字符:fgetc()
從文件中一次讀取一個(gè)字符浊吏。
while(!feof($fp)){
$char=$getc($fp);
if(!feof($fp)) //getc()會(huì)返回EOF
echo ($char=='\n' ? '
':$char);
}
2.7.6 讀取任意長(zhǎng)度:fread()
2.8 使用其他有用的文件函數(shù)
文件是否存在 file_exists(pathname)
文件大小 filesize(pathname)
刪除文件: unlink(pathname)
n12br() 將\n轉(zhuǎn)化成html的換行符
再文件中定位:rewind()\fseek()\ftell()
對(duì)文件指針進(jìn)行定位而昨,看它在文件中的位置
rewind() 定位到文件頭
ftell() 現(xiàn)在的位置
fseek() 將文件指針指向某個(gè)位置
2.9文件鎖定
flock(fp,operation)
LOCK_SE 讀鎖定
_EX 寫鎖定
_UN 釋放鎖定
_NB 防止在請(qǐng)求加鎖時(shí)發(fā)生阻塞
2.10 更好的方式:數(shù)據(jù)庫(kù)管理系統(tǒng)
第3章 使用數(shù)組
數(shù)組索引數(shù)組、關(guān)聯(lián)數(shù)組
3.2.1 數(shù)組索引數(shù)組 初始化
$products=array('titre','oil');
$products=range(1,10); 1-10的數(shù)字?jǐn)?shù)組
3.2.2 訪問(wèn)數(shù)組的內(nèi)容
$products[0]
3.2.3 使用循環(huán)訪問(wèn)數(shù)組
foreach($producets as $current){
echo $current.' ';
}
3.3 使用不同索引的數(shù)組:關(guān)聯(lián)數(shù)組
$price=array('tire'=>100,'oil'=>10,);
訪問(wèn): $price['tire'];
循環(huán)訪問(wèn):
foreach($prices as $key =>$value)
{
echo $key.'='.$value.'<br />';
}
while($element=each($prices))
{
echo $element['key'].'='.$element['value'];
}
while(list($product,$price)=each($price)){
echo "$product - $price<br />";
}
each()函數(shù)卿捎,數(shù)組將記錄當(dāng)前元素配紫,如果希望再次使用使用reset($price);重置到
數(shù)組開始出径密。
3.4 數(shù)組操作符
3.5 多維數(shù)組
3.6 數(shù)組排序
sort函數(shù): 默認(rèn)按升序排列午阵。
asort()函數(shù) 和ksort()函數(shù)對(duì)關(guān)聯(lián)數(shù)組排序
asort()根據(jù)元素值進(jìn)行排序。 value
ksort()根據(jù)關(guān)鍵字進(jìn)行排序 key
反向排序: rsort\arsort\krsort\ 降序
3.7 多維數(shù)組的排序
用戶定義排序
usort() 告訴如何比較
function compare($x,$y){
if($x[1]==$y[1]){
return 0;
}else if($x[1]<$y[1]){
return -1;
}else
return 1;
}
usort($produts,'compare');
3.8 對(duì)數(shù)組進(jìn)行重新排序
shuffle(array)將數(shù)組各元素隨機(jī)排序享扔。
array_reverse()給出一個(gè)原來(lái)數(shù)組的反向排序底桂。
$number=range(1,10);
$number=array_reverse($number);
3.9 從文件載入數(shù)組
$orders=file(pathname);
$number_of_orders=count($orders);
for($i=0;$i<$number_of_orders;$i++){
$line=explode('\t',orders[$i]);
$line[1]=intval($line[1]);
$line[2]=intval($line[2]);
$line[3]=intval($line[3]);
}
3.10 執(zhí)行其他數(shù)組操作
each()
current()
reset()
end()
next()
pos()
prev()
3.10 對(duì)數(shù)組的每一個(gè)元素應(yīng)用任何函數(shù) array_walk()
array_walk(array,func,userdata)
函數(shù)名 傳參入函數(shù)
函數(shù)可自帶數(shù)組的關(guān)鍵字和值。
function my_print($value){
echo "$value<br />";
}
array_walk($array,'my_print');
function my_multiply(&$value,$key,$facotr){
}
array_walk($array,my_multiply,3);
3.10.3 統(tǒng)計(jì)數(shù)組元素的個(gè)數(shù):
count($array) 元素個(gè)數(shù)
sizeof($array) 元素個(gè)數(shù)
array_count_values($array) 統(tǒng)計(jì)每個(gè)特定的值在數(shù)組中出現(xiàn)的次數(shù)惧眠,
返回包含頻率表的關(guān)聯(lián)數(shù)組
3.10.4 將數(shù)組轉(zhuǎn)換成標(biāo)量變量 extract(array,extract_type)
將關(guān)聯(lián)數(shù)組轉(zhuǎn)成標(biāo)量變量籽懦,變量名稱是key,變量值是value.
第4章 字符串操作與正則表達(dá)式
4.2 字符串的格式化
4.2.1 字符串的整理 :trim()\ltrim()\rtrim()
清除多余空格
trim(string,operation):除去開始和結(jié)束位置的空格
opertation:要過(guò)濾的特殊的字符
ltrim() 左邊空格
rtrim()右邊空格
4.2.2 格式化字符串以便顯示
1.html格式化::n12br():
代替換行符
2.為打印輸出而格式化
和echo相同: print()\printf()\sprintf()
printf() 格式化、輸出瀏覽器
sprintf()返回格式化字符串
printf(“%s”,$toal);
想打印“%”,使用%%
printf(“%2\$s”,$toal,$toas); 2/$ 表示用列表中第二個(gè)參數(shù)替換氛魁。
這個(gè)方法可以在重復(fù)參數(shù)中使用
3.改變字符串字母大小寫
strtoupper()
strtolower()
4.2.3 格式化字符串以便存儲(chǔ):addslashes()和stripslashes()
PHP提供了兩個(gè)轉(zhuǎn)義字符串的函數(shù)
add 增加
strip 移除
4.3 用字符串函數(shù)連接和分隔字符串
4.3.1 使用函數(shù)explode()\implode\join()
explode(separator,string,limit)
implode()和join()類似,和explode相反的作用暮顺,粘連在一起。
implode('@',array);
4.3.2 使用strtock()函數(shù)
從字符串中取出片段秀存。
strtock(input,separator)
separator可是字符捶码,也可是字符串。根據(jù)separator的每個(gè)字符進(jìn)行分割
我們僅在第一次調(diào)用 strtok() 函數(shù)時(shí)使用了 string 參數(shù)或链。在首次調(diào)用后惫恼,該函數(shù)僅需要 split 參數(shù),這是因?yàn)樗宄约涸诋?dāng)前字符串中所在的位置澳盐。如需分割一個(gè)新的字符串祈纯,請(qǐng)?jiān)俅握{(diào)用帶 string 參數(shù)的 strtok():
4.3.3 使用substr()函數(shù)
substr(string,start,length)
4.4 字符串比較
部分匹配和其它情況
4.4.1 字符串排序:strcmp()\strcasecmp()\strnatcmp()
strcmp(str1,str2) 返回0 相等
1 str1>str2
strcasecmp 不區(qū)分大小寫
strnatcmp 不區(qū)分大小寫 且自然排序,eg:2>12
4.4.2 使用strlen()函數(shù)測(cè)試字符串長(zhǎng)度
4.5 使用字符串函數(shù)匹配和替換子字符串
4.5.1 在字符串中查找字符串:strstr()\strchr()\strrchr()\stristr()
strstr() 查找匹配的字符串或字符
strchr\strstr 完全一樣
strstr($feedback,'shop'); 從找到位置到末尾的字符串
無(wú)返回false.
stristr 不區(qū)分大小寫
strrchr 最后出現(xiàn)目標(biāo)關(guān)鍵字的剩下的所有字符
4.5.2 查找子字符串的位置:strpos()\strrpos()
推薦這個(gè)叼耙。
strpos(string,needle,offset) 第一次出現(xiàn)位置 offset 偏移量
strrpos 最后出現(xiàn)的位置
失敗返回false
要注意false在弱語(yǔ)言中等于0腕窥,而0是字符串的一個(gè)字符。故使用===
if(strpos(string,'H')===false)
4.5.3 替換子字符串:str_replace()\substr_replace()
str_replace(needle,new_needle,string) 返回替換后的結(jié)果
substr_replace(string,replacement,start)
4.6 正則表達(dá)式
4.6.2 字符集和類
[a-z]at [aeiou] [a-zA-Z]
任何包含在方括號(hào)中的內(nèi)容都是一個(gè)字符類--一個(gè)被匹配的字符所屬的字符集合筛婉。
只匹配一個(gè)簇爆。
[^a-z] 不屬于a-z之間的字符 ^表示否
4.6.3 重復(fù)
表示某個(gè)字符串不止一次的出現(xiàn)
*代表可重復(fù)0或多次
+代表 1或多次
[a-z]+ 最少匹配一次的a到z之間的字符
4.6.4 子表達(dá)式
將一個(gè)表達(dá)式分隔成幾個(gè)子表達(dá)式。圓括號(hào)表示
(very )*large
匹配: large、 very large冕碟、 very very large
4.6.5 子表達(dá)式計(jì)數(shù)
表達(dá)允許重復(fù)的次數(shù)
(very ){1,3} 重復(fù)1-3次
(very ){3} 重復(fù)3次
([a-z]at){2,} 至少重復(fù)2次
([a-z]at)+ 至少重復(fù)一次
4.6.6 定位到字符串的開始或末尾
^ 用于開始
$ 用于末尾拦惋,表示子字符串必須出現(xiàn)在字符串末尾
4.6.7分支
可以用豎線表示一個(gè)選擇
com|edu|net
4.6.8 匹配特殊字符
如果要匹配特殊字符。如,.等安寺, 需要加反斜杠\
正則表達(dá)式模式必須包含在單引號(hào)的字符串中厕妖。
表示雙斜杠使用 \\
如果雙引號(hào)引用的PHP字符串使用反斜杠字符, 需要寫 \\\\
$ \\\$
eg: ^([abc]*d){1,3}\.;|$
4.7用正則表達(dá)式查找子字符串: ereg()\eregi()
ereg(pattern,search,array match). 把匹配結(jié)果放在match中
eregi 不區(qū)分大小寫
4.8 用正則表達(dá)式替換子字符串
ereg_replace(pattern,replacement,search)
4.9 使用正則表達(dá)式分隔字符串
split(pattern,search)
L羰言秸!和正則表達(dá)式相比,盡量使用字符串函數(shù)效率高迎捺。
第五章 代碼重現(xiàn)和函數(shù)編寫
5.1 代碼重用的好處
1.成本
2.可靠性
3.一致性
5.2 require()和include()函數(shù)
允許重新使用任何類型的代碼
require()和include()可以將一個(gè)文件載入到php腳本中
類似于#include語(yǔ)句
使用require()和include()引入函數(shù)庫(kù)举畸,非常有用。防止錯(cuò)誤引入同樣的函數(shù)庫(kù)
2次凳枝。
5.2.1 文件擴(kuò)展名和require()函數(shù)
require('resuable.php');
使用require()語(yǔ)句時(shí)抄沮,必須注意處理文件擴(kuò)展名和PHP標(biāo)記的不同方式。
5.2.2 使用require()制作web站點(diǎn)的模版
如果web頁(yè)面具有一致外觀岖瑰,可以在php中使用require()語(yǔ)句將模版和標(biāo)準(zhǔn)元素加入叛买。
一個(gè)常見的約定就是調(diào)用那些包含在其它文件something.inc中的部分文件代碼,這些文件代碼
若不被調(diào)用蹋订,將會(huì)停止執(zhí)行率挣。
這個(gè)文件可以包含任何希望在一個(gè)腳本中輸入的內(nèi)容,其中包括php露戒、文本\標(biāo)記
當(dāng)需要一個(gè)文件時(shí)椒功,可以使用require()語(yǔ)句。將被請(qǐng)求的文件內(nèi)容代替智什,然后執(zhí)行腳本动漾。
這就意味著,讓載入main撩鹿。php谦炬。
當(dāng)使用require()語(yǔ)句時(shí),必須注意處理文件擴(kuò)展名和php標(biāo)記的不同方式节沦。
PHP并不會(huì)查看所需文件的擴(kuò)展名键思。這就意味著,只要不想直接調(diào)用這個(gè)文件甫贯,就可以任意
命名該文件吼鳞。當(dāng)使用require()語(yǔ)句載入語(yǔ)句時(shí),它會(huì)作為php文件的一部分被執(zhí)行叫搁。
通常赔桌,如果PHP語(yǔ)句放在一個(gè)HTML文件中時(shí)供炎,他們是不會(huì)被處理的。PHP通常解析擴(kuò)展名被
定義為.php文件疾党。但是音诫,如果通過(guò)require語(yǔ)句載入page.html,文件內(nèi)的任何PHP命令
會(huì)被處理雪位。
require()語(yǔ)句調(diào)用時(shí)竭钝,它會(huì)被執(zhí)行。
文件時(shí).html的雹洗,不處理香罐。
文件時(shí).php,才會(huì)處理时肿。
但是通過(guò)require()庇茫,.html也會(huì)被處理。
但是一般擴(kuò)展名是 .inc或 .php螃成。
需要注意旦签,擴(kuò)展名為.inc或其它一些文件保存在web文檔樹內(nèi)種,而且用戶可以在直接在如锈颗,
用戶將以普通文本的形勢(shì)顷霹,
5.3 在php中使用函數(shù)
函數(shù)是一個(gè)給出了調(diào)用接口的自包含模塊咪惠,它可以執(zhí)行一些任務(wù)击吱,還可以返回結(jié)果。
5.3.1 調(diào)用函數(shù)
fopen(string[,resource context])
方括號(hào)指明了這個(gè)參數(shù)是可選的遥昧。
5.3.2 調(diào)用未定義的函數(shù):出錯(cuò)
5.3.3 理解字母大小寫和函數(shù)名稱
函數(shù)調(diào)用不區(qū)分大小寫覆醇。 函數(shù)命名:都用小寫字母
函數(shù)名稱和變量不一樣乖菱,變量分大小寫沙合,函數(shù)不區(qū)分窒百。
5.4 理解為什么要定義自己的函數(shù)
5.5 了解基本的函數(shù)結(jié)構(gòu)
希望在一個(gè)函數(shù)中退出php并輸入HTML腳本:
<?php
function my_function(){
?>
my function was call;
<?php
}
?>
函數(shù)的命名
php不支持函數(shù)的重載征讲。
E憔小趴乡!可變函數(shù):$name();
根據(jù)$name的值確定珊豹,取出$name中的值吭练,尋找具有那個(gè)名稱的函數(shù)威创,并且
調(diào)用該函數(shù)落午。
5.6使用參數(shù)
function create_table($data){
echo '<table border="1">';
reset($data);
$value=current($data);
while($value){
echo $value;
$value=next($data);
}
}
5.7 理解作用域
這塊可以翻回來(lái)看一下
函數(shù)內(nèi)部和外部聲明同一個(gè)變量名是合法的,互不影響的肚豺。當(dāng)在函數(shù)內(nèi)部第一次調(diào)用的時(shí)候溃斋,
它會(huì)聲明,和外部的無(wú)關(guān)吸申,函數(shù)調(diào)用結(jié)束后梗劫,刪除享甸。
作用域:
函數(shù)外的變量到了函數(shù)的內(nèi)部,無(wú)法訪問(wèn)的梳侨。如果能夠訪問(wèn)的話蛉威。還需要傳值做什么。傳值就是為了讓函數(shù)接受參數(shù)走哺。
超級(jí)全局變量哪都能訪問(wèn)瓷翻。
靜態(tài)變量會(huì)累加。 外部訪問(wèn)不到割坠。
全局變量在函數(shù)外聲明齐帚,想要在內(nèi)部訪問(wèn),需要提前聲明一下彼哼,才能使用对妄。
外部聲明variable, 函數(shù)內(nèi)部第一次調(diào)用輸出時(shí),會(huì)創(chuàng)建一個(gè)新的變量敢朱, 所以輸出0
require 在函數(shù)內(nèi)部剪菱,就是函數(shù)作用域。
外部拴签,就是全局作用句孝常。
5.8 函數(shù)的引用傳遞和值傳遞
function myfun(&$value){
}
5.9使用return 關(guān)鍵字
5.10 實(shí)現(xiàn)遞歸
第6章 面向?qū)ο蟮腜HP
面向?qū)ο蟮拈_發(fā)方法試圖在系統(tǒng)中引入對(duì)象的分類、關(guān)系和屬性
6.1.1 類和對(duì)象
對(duì)象的屬性是于對(duì)象相關(guān)的特性或變量蚓哩。
對(duì)象的操作是對(duì)象可以執(zhí)行的方法构灸。
!對(duì)象的操作也就是對(duì)象的接口
對(duì)象是一個(gè)保存數(shù)據(jù)和操作這些數(shù)據(jù)的操作方法的唯一岸梨、可標(biāo)識(shí)的集合喜颁。
數(shù)據(jù)封裝
6.1.2 多態(tài)性
指不同類的同一操作可以有不同的行為。
6.1.3 繼承
6.2 在php中創(chuàng)建類曹阔、屬性和操作
6.2.1 類的結(jié)構(gòu)
class classname{
public $attribute;
function operation(){
}
}
6.2.2 構(gòu)造函數(shù)
class classname{
function __constrct($param){
}
}
6.2.3 析構(gòu)函數(shù)
function __destruct(){}
6.3 類的實(shí)例化
$a=new classname();
6.4 使用類的屬性
$this->attribute
使用__get()__set()
class classnae{
public $attribute;
function __get($name){
return $this->$name;
}
function __set($name,$value)
{
$this->$name=$value;
}
}
我們并不直接訪問(wèn)__get()\__set(),而是使用
$a->attribute=5;
$a->attribute
通過(guò)編寫get\set方法半开,可以控制訪問(wèn)的入口,設(shè)置邊界檢查赃份,確認(rèn)數(shù)據(jù)是否正確寂拆。
或者我們需要從數(shù)據(jù)庫(kù)取出數(shù)據(jù),只需修改get和set即可抓韩。
6.5 使用private和public關(guān)鍵字控制訪問(wèn)
protect修飾纠永,只能類內(nèi)部訪問(wèn),但是可被繼承,繼承后只能內(nèi)部使用园蝠。
而private 無(wú)法繼承渺蒿。
默認(rèn)是public,如聲明類時(shí),不寫public
6.6 類操作的調(diào)用
$a->operation1();
6.7 在PHP中實(shí)現(xiàn)繼承
class B extends A{
}
6.7.1 通過(guò)繼承使用private和protected訪問(wèn)修飾符控制可見性
1胙ΑC啊怠蹂!protect可以被繼承,但繼承后少态,只能在類內(nèi)部使用城侧。
6.7.2 重載(java中叫做重寫,覆蓋父類)
如果想使用父類的最初版本: parent::opertaion();
A:operation();
6.73. 使用final關(guān)鍵字禁止繼承和重載
當(dāng)在一個(gè)函數(shù)聲明前面使用這個(gè)關(guān)鍵字時(shí)彼妻,這個(gè)函數(shù)將不能在人惡化子類中
被重載嫌佑。
也可禁止類被繼承。
6.74 理解多重繼承
PHP支持單一繼承
6.7.5 實(shí)現(xiàn)接口q
接口的思想是指定一個(gè)實(shí)現(xiàn)了該接口的類必須實(shí)現(xiàn)的一系列函數(shù)侨歉。
implements
6.8類的設(shè)計(jì)
web開發(fā)中可能使用的類可能包括網(wǎng)頁(yè)屋摇、用戶界面組件、購(gòu)物車幽邓、錯(cuò)誤處理炮温、商品分類
顧客。
6.9 編寫類代碼
class page{
public $content;
public $title="TLA";
public $keyword="dsd";
public $button=array(
"Home"=>"home.php",
"Contant"=>"contact.php"
);
function __set($name,$value){
$this->$name=$value;
}
function Display(){
echo '<html>\n<head>\n';
$this->DisplayTitle();
$this->DisplayKeyWords();
$this->DisplayStyles();
echo '</head>\n<body>\n';
$this->DisplayHeader();
$this->DisplayMenu($this->buttons);
echo $this->content;
$this->DsipalyFooter();
echo "</body>\n</html>\n";
}
function DisplayTitle(){
echo '<title>'.$this->title.'</title>';
}
function DisplayKeywords(){
echo '<meta name=\"keywords\" content=\''.$this->keywords.'\'/>';
}
public function DisplayStyles(){
?>
<style>
</style>
<?php
}
public function DisplayMenu($buttons){
$width=100/count($button);
while(list($name,$url)=each($buttons)){
$this->DisplayButton($width,$name,$url,!$this->IsURLCurrentPage
($url));
}
}
}
<?php
require("page.inc");
$homepage=new Page();
$homepage->content="";
$homepage->Display();
?>
6.10 理解PHP面向?qū)ο蟮母呒?jí)功能
6.10.1 使用Per-Class常量
PHP提供了Per-Class常量
<?php
class Math{
const pi=3.14;
}
echo 'Math::pi='.Math::pi.'\n';
6.10.2 實(shí)現(xiàn)靜態(tài)方法:
PHP允許使用static關(guān)鍵字牵舵。
靜態(tài)方法柒啤,不能使用this關(guān)鍵字。
class Math{
static function squared($input){
return $input;
}
}
ehco Math::squared(8);
6.10.3 檢查類的類型和類型提示
instanceof關(guān)鍵字允許檢查一個(gè)對(duì)象的類型畸颅。
function check_hink(B $someclass){ //傳入的必須是B的實(shí)例担巩。
}
6.10.4 延遲靜態(tài)綁定
該特性允許在一個(gè)靜態(tài)繼承的上下文中對(duì)一個(gè)被調(diào)用類的引用。
class A{
public static function who(){
echo __CLASS__;
}
public static function test(){
static::who();
}
}
class B extends A{
public static function who(){
echo __CLASS__;
}
}
B::test();
輸出: B
6.10.5 克隆對(duì)象
PHP提供clone關(guān)鍵字没炒。允許復(fù)制一個(gè)已有的對(duì)象涛癌。
$c=clone $b;
__clone()方法中的一個(gè)很好特性就是在使用默認(rèn)行為創(chuàng)建一個(gè)副本后能夠被調(diào)用。
這樣窥浪,在這個(gè)階段祖很,可以只改變希望改變的內(nèi)容。
在__clone()方法中添加的最常用功能就是確保作為引用進(jìn)行處理的類屬性能過(guò)正確復(fù)制漾脂。
如果要克隆一個(gè)包含有對(duì)象引用的類,可能需要獲得該對(duì)象的第二個(gè)副本胚鸯,而不是該對(duì)象的
第二個(gè)引用骨稿。
6.10.6 使用抽象類
類不能被實(shí)例化,類方法也沒有實(shí)現(xiàn)姜钳,只提供類方法的聲明坦冠,沒有實(shí)現(xiàn)。
6.10.7 使用__call()重載方法
__call()方法哥桥,該方法用來(lái)實(shí)現(xiàn)方法的重載辙浑。
public function __call($method,$p){
if($method=='display'){
if(is_object($p[0])){
$this.displayObject($p[0]);
}else if(is_array($p[0])){
$this->displayArray($p[0]);
}
}
}
$ov=new overload();
$ov->display(array(1,2,3));
$ov->display('cat');
6.10.8 使用__autoload()方法
另一個(gè)特殊的函數(shù)是__autoload().單獨(dú)的函數(shù)
會(huì)自動(dòng)調(diào)用你所需要實(shí)例化的類文件。
function __autoload($name){
include_once $name.'.php';
}
7.1 異常處理的概念
手動(dòng)拋出異常
try{
throw new Exception("A",43);
}catch(Exception $e){
echo "ss".$e->getCode();
}
7.3 用戶自定義異常