PHP與mysql web開發(fā)第四版 筆記

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 用戶自定義異常

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末拟糕,一起剝皮案震驚了整個(gè)濱河市判呕,隨后出現(xiàn)的幾起案子倦踢,更是在濱河造成了極大的恐慌,老刑警劉巖侠草,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辱挥,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡边涕,警方通過(guò)查閱死者的電腦和手機(jī)晤碘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)功蜓,“玉大人园爷,你說(shuō)我怎么就攤上這事∈胶常” “怎么了腮介?”我有些...
    開封第一講書人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)端衰。 經(jīng)常有香客問(wèn)我叠洗,道長(zhǎng),這世上最難降的妖魔是什么旅东? 我笑而不...
    開封第一講書人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任灭抑,我火速辦了婚禮,結(jié)果婚禮上抵代,老公的妹妹穿的比我還像新娘腾节。我一直安慰自己,他們只是感情好荤牍,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開白布案腺。 她就那樣靜靜地躺著,像睡著了一般康吵。 火紅的嫁衣襯著肌膚如雪劈榨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,394評(píng)論 1 310
  • 那天晦嵌,我揣著相機(jī)與錄音同辣,去河邊找鬼。 笑死惭载,一個(gè)胖子當(dāng)著我的面吹牛旱函,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播描滔,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼棒妨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了含长?” 一聲冷哼從身側(cè)響起券腔,我...
    開封第一講書人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤伏穆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后颅眶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜈出,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年涛酗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了铡原。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡商叹,死狀恐怖燕刻,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情剖笙,我是刑警寧澤卵洗,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站弥咪,受9級(jí)特大地震影響过蹂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜聚至,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一酷勺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扳躬,春花似錦脆诉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至役纹,卻和暖如春偶摔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背字管。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工啰挪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嘲叔。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像抽活,于是被迫代替她去往敵國(guó)和親硫戈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容