第一篇:PHP 高級(jí)篇總結(jié)
PHP模板技術(shù)
當(dāng)我第一次見(jiàn)到php模板的時(shí)候,簡(jiǎn)直被迷上了。原來(lái)php世界里還有這么好的東西。我瘋狂地學(xué)習(xí)。
好在當(dāng)時(shí)的php模板還不是很龐大,很快我了解了它的原理,并也能自己寫一些了。后來(lái),smarty橫空出世,更是擁有了許多為它著迷的fans.許多人開(kāi)始寫模板引擎,將smarty或其他模板加以改造,使之符合自己的需要??v觀當(dāng)今模板世界,php模板引擎主要分為兩種:
一種是替換特定字串型的。美工做出來(lái)的頁(yè)面,中間會(huì)嵌入一些什么{block.title}這樣的字符串,然后程序讀入這個(gè)模板文件,將中間的{block.title}的字樣替換成實(shí)際從數(shù)據(jù)庫(kù)中讀取的內(nèi)容。
還有一種符雜一些,是一種編譯型的。以smarty為代表,模板文件中實(shí)際上包含了一些簡(jiǎn)化的php代碼,比如有的寫的是< {=$site_name}>,<{if $counts>0 }>這樣的語(yǔ)句,實(shí)際是一種自行定義的語(yǔ)言格式。web開(kāi)發(fā)久的人一眼能看出它們指的是什么。這一類往往會(huì)在第一次訪問(wèn)時(shí)被預(yù)編譯,轉(zhuǎn)換成一個(gè) php文件何存起來(lái)。比如 <{=$site_name}>就變成了,<{if $count>0 }> 就變成了0){?>。從第二次起,就直接包含已經(jīng)編譯出來(lái)的php文件。當(dāng)然,各種模板的處理的具體細(xì)節(jié)不一樣。但是,我們?yōu)槭裁匆媚0澹?/p>
這個(gè)問(wèn)題我也不能很好的回答。但是有很多人這么說(shuō):要讓美工和程序員的工作分開(kāi)。要讓代碼層和表現(xiàn)層分開(kāi)。
那么我們看這兩種方式實(shí)現(xiàn)了嗎? 讓您的美工人員打開(kāi)一個(gè)smarty文件,讓他按他的思路去改一下視圖設(shè)計(jì)。他會(huì)告訴您,天哪,你怎么把我的設(shè)計(jì)變成這樣一幅樣子了?這些foreach,if都是什么意思?噢,天哪,我的表格怎么撐得這么大了?….原來(lái)編譯型的模板技術(shù)讓美工更沒(méi)法子做美工了。
那么替換字符串型的呢?看起來(lái)是輕松多了。不過(guò)您可以測(cè)測(cè)您的程序速度,看看他是否已經(jīng)慢了一倍以上。很容易,您用了太多的有preg_match,或是 str_ireplace之類的語(yǔ)句來(lái)替換。程序重復(fù)一次又一次在您那幾萬(wàn)個(gè)甚至更多字節(jié)的模板文件中查找某個(gè)字串,來(lái)替換內(nèi)容。
不僅如此,你還發(fā)現(xiàn)您哪天想在視層面插一點(diǎn)東西時(shí),處處受制于模板。您肯定很想直接在模板中寫一段之類的語(yǔ)句,但是,很抱歉,您不能這么寫。如果只是想echo 一個(gè)什么東西,您可以在模板中加一個(gè){{var}}的串,然后在php程序中寫 $var=”這一個(gè)串”;
$template->assign(”var”,$var);
但是如果您不是想輸出呢,想做其他操作?抱歉,您還是得改php代碼。這些模板都支持規(guī)矩矩的表格狀的輸出,但是,如果我想輸出20條記錄,我要弄一個(gè)第一行2列記錄的,第二行3列的,第三行又是2行的之類的,或者是其他類似找碼,您打算怎么辦? 難道再讓您的模板引擎也升級(jí)成為編譯性的,好讓您往您的模板中加入php語(yǔ)句? 您錯(cuò)了。其實(shí),我們看一看,我們的模板引擎充當(dāng)了什么樣的角色呢?我們把一段特定的按一定規(guī)則編寫的html代碼進(jìn)行一定的數(shù)據(jù)處理后輸出成了另外 一段,輸出過(guò)程中某些字符發(fā)生了改變。那我們的偉大的php干了什么呢?它幫我們把我們按規(guī)則寫好的php代碼也按一定規(guī)則輸出成了一段html。兩者本 質(zhì)是一樣的。只是,php本身比我們那些蹩腳的模板引擎更快,更漂亮。
再說(shuō)細(xì)一點(diǎn),現(xiàn)在用的最多的Smarty.看一看它的結(jié)構(gòu): <{if $article.rates}>
<{php}>echo art_constant(“MD_RATE”);<{/php}>: <{$article.rating}>/<{$article.rates}> <{/if}>
你覺(jué)得它是一個(gè)美工能看清的html文件么? 看看編譯后的結(jié)果,它看起來(lái)應(yīng)該是這樣的:
if($articles.rates){ ?>
:
/
哈。我們偉大的smarty把這html也變成了php了。然后在以后的工作中,這些php代碼會(huì)直接被運(yùn)行。
有必要嗎?本來(lái)是apache承載php,php直接編譯php 源代碼,現(xiàn)在變成了apache承載php,php編譯smarty引擎,smarty引擎又去編譯html文件。反而多了一層,smarty自個(gè)兒把本來(lái)php要做的工作拿了做了。
而且糟糕的是,smarty的模板打開(kāi)來(lái)以后,比php文件更讓人難以看清。所以我說(shuō),放棄您的模板系統(tǒng)吧。但記住我們開(kāi)發(fā)模板系統(tǒng)的初衷。您會(huì)說(shuō):那要是放棄模板系統(tǒng)了,我怎么分開(kāi)程序邏輯和視圖層面? 這個(gè)也太好辦了。您可以這樣寫: 第一個(gè)文件這樣寫:
file :logic.php
@author renlu xu
$rs=mysql_query(“select id,title,body from articles order by id desc limit 30”);while($row=$mysql_fetch_assoc($rs)){
$rows[]=$row;} ?>
第二個(gè)文件作為您的視層面的文件。您可以讓您的平面設(shè)計(jì)師在mac上設(shè)計(jì)漂亮絕頂?shù)膱D片,然后切成html文件,交給您的頁(yè)面整合工程師。這個(gè)工程 不需要懂太多php,他基本上只需要會(huì)用print就行了。他把這個(gè)html文件改名為view.php,然后在里面加上相應(yīng)代碼:
file:view.php
@author renlu xu
foreach($rows as $row){
echo “
ok.這就視層面文件。這個(gè)文件用織夢(mèng)者(dreamweaver)打開(kāi)后,應(yīng)該跟美工做出來(lái)的圖是一樣的,就僅僅多了用那個(gè)黃色的問(wèn)號(hào)代表的php代碼。寫得好時(shí),dreamweaver還能列出您的php代碼中輸出了什么內(nèi)容,效果更佳。這兩個(gè)文件,就是一個(gè)是邏輯層,一個(gè)是視層面。然后用index.php將他們包含起來(lái)。
file:index.php
@author renlu xu
include “databaseConnect.php”;//連接數(shù)據(jù)庫(kù)的代碼,我就不寫了
include “l(fā)ogic.php”;include “view.php”;include “cache.php”;?>
這樣邏輯和視,就分開(kāi)了。那有人會(huì)說(shuō),如果我用模板,可以將要輸出的內(nèi)容寫入到靜態(tài)文件中,現(xiàn)在沒(méi)了模板我該怎么辦?
這個(gè)不是問(wèn)題。我們用的是php,超酷的php.看看,我們加了cache.php.這就是用來(lái)實(shí)現(xiàn)您說(shuō)的緩存效果的。我們的cache文件:
file:cache.php
@author renlu xu
$content=ob_get_content();$fp=fopen(“index.html”,“w”);fwrite($fp,$content);fclose($fp);?>
當(dāng)然,index.php也改成:
file:index.php
@author renlu xu
if(file_exists(“index.html”)){
include “index.html”;exit();}
include “databaseConnect.php”;//連接數(shù)據(jù)庫(kù)的代碼,我就不寫了
include “l(fā)ogic.php”;include “view.php”;incldue “cache.php”;
?>
這樣您看這緩存效果是不是就出來(lái)了? 有人說(shuō):我用模板還有一個(gè)好處啊,就是模板寫錯(cuò)了還不會(huì)影響到程序的運(yùn)行。是的??龋趺凑f(shuō)呢?您在模板中將<{=$site_name}& amp;gt;寫成了<{=$sie_name}>是沒(méi)啥,您的php程序還是很”健壯”地運(yùn)行著。不過(guò)您沒(méi)覺(jué)得,當(dāng)您期望的那一個(gè)將由& lt;{=$site_name}>來(lái)打出來(lái)的網(wǎng)站名稱沒(méi)有出現(xiàn)的時(shí)候,您排起錯(cuò)來(lái)會(huì)很難找嗎?對(duì)于一個(gè)程序師來(lái)說(shuō),您不覺(jué)得,光只視層面的那些 echo語(yǔ)句,只應(yīng)該是您工作中極微不足道的一部分嗎?在這個(gè)主要是echo語(yǔ)句構(gòu)成的視層面文件view.php,您還出現(xiàn)編譯期錯(cuò)誤,是不是該拉出去 打屁屁?
另外,在php程序正式上線運(yùn)行時(shí),您也可以將它的報(bào)錯(cuò)功能關(guān)閉啊。
PHP 模板高級(jí)篇總結(jié)
怎么使用PHP來(lái)快速地編寫代碼,模版似乎成了唯一的選擇。不過(guò)一個(gè)PHPer最終應(yīng)該堅(jiān)持使用模版,放棄模版,還是使用自己的模版?
以下想法是屬于所有PHPer的想法:
“模板這東西,其實(shí)最重要的是適合自己的項(xiàng)目需求,而不是適合自己的習(xí)慣.比如一個(gè)企業(yè)的宣傳網(wǎng)站,訪問(wèn)量不大,更新量也不大,用什么都相同,甚至不用,直接PHP+HTML寫可能速度最快.也沒(méi)什么不可.不過(guò)如果是個(gè)新聞系統(tǒng),或是內(nèi)容發(fā)布系統(tǒng).兩者這樣,就非常有必要用到模板這一技術(shù).因?yàn)樗麄兌加幸粋€(gè)共通的地方,就是有一類頁(yè)面要用到同一個(gè)樣式的頁(yè)面設(shè)計(jì).而根據(jù)實(shí)際情況,比如訪問(wèn)量的大小,項(xiàng)目的緊急程度及程式員對(duì)于模板技術(shù)的熟練程度,選擇最適合項(xiàng)目的模板技術(shù)..這才是最佳選擇?!盵來(lái)自leslee]
“從開(kāi)始學(xué)習(xí)php就開(kāi)始接觸模板,我用的是smarty模板引擎(官方支持,功能強(qiáng)大),使用時(shí)間越長(zhǎng)越發(fā)覺(jué)得模板是個(gè)好東西。只要要涉及到頁(yè)面顯示的東西,我的都會(huì)用模板去寫,如果不用模板寫程式總覺(jué)得別扭。我想其他的phper也會(huì)有相同的感覺(jué),因?yàn)槟0逶O(shè)計(jì)的初衷是將代碼和頁(yè)面分離出來(lái)分別處理,畢竟誰(shuí)也不愿意一邊寫代碼,一邊處理頁(yè)面。”
“有人說(shuō)SMARTY已非常好了,但也有人說(shuō)SUPERTPL更好,也有人更中意于PHPLIB我認(rèn)為每個(gè)模板都有自己好處,也有自己的不組,關(guān)鍵看你的項(xiàng)目需要什么,用什么最佳!”[來(lái)自feifengxlq]“用模板肯定是沒(méi)有錯(cuò)的最初使用的是PHPLIB,使用過(guò)了一段時(shí)間后,感覺(jué)太簡(jiǎn)單了,每個(gè)模板變量都要寫代碼去替換,每引用一個(gè)模板也得寫一行代碼(也許PHPLIB有批量處理功能,我太菜不知道)因而放棄了,后來(lái)用plog建站的時(shí)候接觸到了smarty,感覺(jué)smarty過(guò)于龐大,確實(shí)能加快研發(fā)進(jìn)度,不過(guò)非常多功能實(shí)際都用不上,因此,最后還是自己寫了模板引擎,要模板實(shí)現(xiàn)的功能非常簡(jiǎn)單,就是個(gè)模板變量的替換功能,再加上include其他模板和foreach塊操作功能?!?/p>
“我還是用PHPLIB,不過(guò),我會(huì)按自已的經(jīng)驗(yàn)和需要,寫一些函數(shù)或類來(lái)封裝最常用的一些針對(duì)模板輸出的處理?!盵來(lái)自seraph]“我使用自己的模板,還要寫模板解析代碼,累呀。我選擇使用現(xiàn)有優(yōu)秀的模板?!盵來(lái)自Bantu]“偶在別的論壇上看見(jiàn)一些非常厲害的人不用模板...可能是沒(méi)到那種境界...個(gè)人感覺(jué)還是使用模板的好..至少能分工..加快研發(fā)速度。使用自己的模板? 感覺(jué)沒(méi)有必要哈...用現(xiàn)成的就行了..在現(xiàn)成的基礎(chǔ)上加上一些自己學(xué)要的實(shí)際功能?!盵來(lái)自Phzzy]“我不使用模板引擎,但我也是使用模板,只是跟你們的不相同。因?yàn)槟0逡嫣烁杏X(jué)不好用?!?/p>
“我用第三方的,最佳是開(kāi)源的。至于用哪個(gè),看個(gè)人的愛(ài)好吧?!盵來(lái)自leeyupeng]“我還是傾向于使用自己的模板簡(jiǎn)單實(shí)用?!盵來(lái)自夕日]“由于考慮到性能,我一般不使用通用的模板,會(huì)根據(jù)實(shí)際情況做一些取舍,具有一定的局限性?!盵來(lái)自Ben]“根據(jù)需要來(lái)決定使不使用模板,及使用什么模板。靈活一點(diǎn)總是沒(méi)有壞處的。”[來(lái)自xlmo]“個(gè)人喜歡簡(jiǎn)單快速的模板,能考慮用現(xiàn)成的模板,不過(guò)一般會(huì)根據(jù)實(shí)際項(xiàng)目?jī)?yōu)化一下,把里面用不到的一些功能刪除等?!?/p>
“使用模板一般倒不會(huì)導(dǎo)致瓶頸,至于會(huì)影響點(diǎn)效率主要這么幾點(diǎn):
1、程式和模板分離后,一個(gè)文件就變成兩個(gè)或多個(gè)了,那讀取模板這個(gè)IO也是要點(diǎn)時(shí)間的
2、解析模板相對(duì)是比較復(fù)雜的,一般都需要N個(gè) preg_match,preg_replace之類函數(shù)來(lái)處理或替換
3、模板的載入和替換工作明顯需要比不使用模板占用更多的內(nèi)存
所以提高效率注意以下幾點(diǎn):
1、模板解析程式選用支持編譯和緩存的,這個(gè)對(duì)性能好處是最明顯,看自己怎么靈活應(yīng)用了
2、解析程式盡量簡(jiǎn)單,什么功能都放進(jìn)去那用起來(lái)是方便了,性能也差了
3、做html的模板頁(yè)面時(shí)候也是遵從簡(jiǎn)單的原則,比如按xhtml標(biāo)準(zhǔn)做,盡量不要把一個(gè)頁(yè)面拆成非常多個(gè)模板然后再include?!?/p>
“如果使用模版的話,我覺(jué)得有能力還是自己寫一個(gè)好。這也是鍛煉。不過(guò)要用我覺(jué)得小強(qiáng)非常好。能在可視化下編輯。”[來(lái)自jejwe]“我個(gè)人也認(rèn)為模板文件的可視化編輯性非常重要。不能需求模板頁(yè)面的制作也要有相當(dāng)程式研發(fā)基礎(chǔ)的?!盵來(lái)自seraph]“具體問(wèn)題具體分析,模板使用和否,選擇已成型的優(yōu)秀模板類還是自己去寫,一切都是根據(jù)具體的項(xiàng)目研發(fā)而言的,不能死求哪一個(gè)的。”[來(lái)自Deepseath]“感覺(jué)現(xiàn)有的那些模版不夠完善,要么功能少,要么速度慢,還是自己做的好?!?/p>
“總結(jié),PHP模板能讓你的代碼脈絡(luò)更加清晰,結(jié)構(gòu)更加合理化。不過(guò),PHP模板的發(fā)展總是會(huì)比PHP應(yīng)用的迅速發(fā)展緩慢許多,在這種情況下,反而會(huì)影響到PHP應(yīng)用的研發(fā)。對(duì)于每一個(gè)PHPer來(lái)說(shuō),沒(méi)有一個(gè)PHP模板對(duì)他是最合適、最完美的。因?yàn)樗^的PHP模板就是大眾化的東西,并不是針對(duì)個(gè)人的。所以,如果能在對(duì)PHP特點(diǎn)、應(yīng)用有清晰的認(rèn)識(shí)的基礎(chǔ)上充分認(rèn)識(shí)到模板的優(yōu)劣勢(shì)和該P(yáng)HP應(yīng)用原理,PHPer就能得到自己需要的適合自己研發(fā)風(fēng)格的PHP模板。這也是PHP最重要的思想之一,PHP提供的只是方法、途徑,而不是最終解決方案。所以模板和PHP應(yīng)用、產(chǎn)品相同都能改造為自己的PHP模板。因?yàn)檫@里面寄托著創(chuàng)造者的思想。
限于各種不同的條件限制,比如時(shí)間、經(jīng)驗(yàn),所以大家可能認(rèn)為做一個(gè)自己的PHP模板是非常困難。其實(shí),你需要的不是重新構(gòu)造一個(gè)PHP模板,而是選擇一個(gè)最貼近自己的PHP模板加以改造。因?yàn)镻HP需要繼承、創(chuàng)新。當(dāng)然,做一個(gè)自己的PHP模板一步一步地實(shí)現(xiàn),并及時(shí)融入最新的思想和理念。個(gè)人PHPer能從細(xì)節(jié)做起,從自己最需要的地方、自己的研發(fā)習(xí)慣做起。PHPer團(tuán)隊(duì)能分工協(xié)作進(jìn)行PHP模板本地化,尤其對(duì)于公司而言尤為實(shí)用。就算你只是修改了PHP模板里面的一個(gè)符號(hào),僅僅是個(gè)符號(hào)也能說(shuō)明你對(duì)他加以了改造,他就是屬于你的。最重要的是,屬于自己的PHP模板永遠(yuǎn)不是固定不變的,他將伴隨你一直成長(zhǎng),也會(huì)成為你的PHP歷程的見(jiàn)證。
PHP不必非常精通的語(yǔ)法;PHP不必你自己去研發(fā)眾多的庫(kù);PHP不必你去為性能、穩(wěn)定性等語(yǔ)言自身的特性而擔(dān)心。PHP需要的是你的邏輯;PHP需要的是你的創(chuàng)造力;PHP需要的是你的思想!”
第二篇:PHP高級(jí)程序員筆試試題-2011(范文模版)
PHP高級(jí)程序員筆試試題
1、Include require include_once require_once 的區(qū)別?
2、.向php傳入?yún)?shù)的兩種方法。(mysql)請(qǐng)寫出數(shù)據(jù)類型(int char varchar datetime text)的意思;請(qǐng)問(wèn)varchar和char有什么區(qū)別?
3、您是否用過(guò)版本控制軟件? 如果有您用的版本控制軟件的名字是?
4、寫代碼來(lái)解決多進(jìn)程/線程同時(shí)讀寫一個(gè)文件的問(wèn)題。
5、Mysql 的存儲(chǔ)引擎,myisam和innodb的區(qū)別?
6、MySQL數(shù)據(jù)庫(kù)作發(fā)布系統(tǒng)的存儲(chǔ),一天五萬(wàn)條以上的增量,預(yù)計(jì)運(yùn)維三年,怎么優(yōu)化?寫出一種排序算法(原理),并說(shuō)出優(yōu)化它的方法?
7、對(duì)于大流量的網(wǎng)站,您采用什么樣的方法來(lái)解決各頁(yè)面訪問(wèn)量統(tǒng)計(jì)問(wèn)題?
8、請(qǐng)介紹Session的原理,大型網(wǎng)站中Session方面應(yīng)注意什么?
9、介紹一下常見(jiàn)的SSO(單點(diǎn)登陸)方案(比如dedecms整合discuz的passport)的原理?10、11、12、13、14、15、16、17、18、19、20、您寫過(guò)的PHP框架的特點(diǎn),主要解決什么問(wèn)題,與其他框架的不同點(diǎn)? 寫一段上傳文件的代碼?
測(cè)試php性能和mysql數(shù)據(jù)庫(kù)性能的工具,和找出瓶頸的方法? ssh 安全增強(qiáng)方法;密碼方式和rsa key 方式的配置; linux下查看當(dāng)前系統(tǒng)負(fù)載信息的一些方法? gdb,strace,valgrind的基本使用; javascript中的prototype; javascript中this對(duì)象的作用域; IE/firefox常用hack;
firefox,IE下的前端js/css調(diào)試工具;
一群猴子排成一圈,按1,2,…,n依次編號(hào)。然后從第1只開(kāi)始數(shù),數(shù)到第m只,把它踢出圈,從它后面再開(kāi)始數(shù),再數(shù)到第m只,在把它踢出去…,如此不停的進(jìn)行下去,直到最后只剩下一只猴子為止,那只猴子就叫做大王。要求編程模擬此過(guò)程,輸入m、n, 輸出最后那個(gè)大王的編號(hào)。用程序模擬該過(guò)程。
21、HTTP協(xié)議中幾個(gè)狀態(tài)碼的含義:503 500 401 200 301 302……
22、一些編譯php時(shí)的configure 參數(shù);23、24、25、26、27、28、Safe_mode 打開(kāi)后哪些地方受限.;
已知某年元月一日星期幾,不使用日期函數(shù),計(jì)算某年某月某日星期幾; memcache與memcached的區(qū)別與安裝方法; Memcache和mysql交互流程操作原理; 設(shè)計(jì)一個(gè)無(wú)限分類表,并寫出核心代碼;
第三篇:高級(jí)JAVA、PHP程序員崗位職責(zé)
1.負(fù)責(zé)公產(chǎn)品軟件設(shè)計(jì)、開(kāi)發(fā)、測(cè)試和維護(hù)工作,主要為C++、java、php。
2.負(fù)責(zé)任務(wù)的質(zhì)量和完整性,包含故障分析、解決、修復(fù),一般文檔編制。
3.發(fā)現(xiàn)和指出項(xiàng)目或計(jì)劃中的設(shè)計(jì)問(wèn)題。
4.總結(jié)產(chǎn)品研發(fā)經(jīng)驗(yàn),持續(xù)改進(jìn)產(chǎn)品性能。
5.為產(chǎn)品的市場(chǎng)推廣提供技術(shù)支持。
6.報(bào)據(jù)用戶或公司其他部門的要求進(jìn)行設(shè)計(jì)修改和設(shè)計(jì)改進(jìn)。
7.研究項(xiàng)目技術(shù)細(xì)節(jié),編寫相應(yīng)的說(shuō)明書(shū)。
第四篇:php課程總結(jié)
一、時(shí)間和地點(diǎn):
每周四上午在F311上課。
二、課程內(nèi)容:
通過(guò)這段時(shí)間的學(xué)習(xí),我對(duì)PHP中的MySQL數(shù)據(jù)庫(kù)有了一定的理解。由于以前沒(méi)有基礎(chǔ),在老師講課的過(guò)程開(kāi)始有點(diǎn)費(fèi)盡,盡量記了一些。首先學(xué)習(xí)了一些定義:MySQL是一個(gè)小型關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),開(kāi)發(fā)者為瑞典MySQL AB公司。目前MySQL被廣泛地應(yīng)用在Internet上的中小型網(wǎng)站中。由于其體積小、速度快、總體擁有成本低,尤其是開(kāi)放源碼這一特點(diǎn),許多中小型網(wǎng)站為了降低網(wǎng)站總體擁有成本而選擇了MySQL作為網(wǎng)站數(shù)據(jù)庫(kù)。
數(shù)據(jù)(Data)是對(duì)客觀事物的符號(hào)表示,如圖形符號(hào)、數(shù)字、字母等,數(shù)據(jù)是數(shù)據(jù)庫(kù)中存儲(chǔ)的基本對(duì)象。在日常生活中,人們直接用語(yǔ)言來(lái)描述事物;在計(jì)算機(jī)中,為了存儲(chǔ)和處理這些事物,就要將事物的特征抽象出來(lái)組成一個(gè)記錄來(lái)描述。之后,進(jìn)行數(shù)據(jù)的編寫,知道了數(shù)據(jù)庫(kù)的發(fā)展史:人工管理階段(人力手工整理存儲(chǔ)數(shù)據(jù))、文件系統(tǒng)階段(使用磁盤文件來(lái)存儲(chǔ)數(shù)據(jù))、數(shù)據(jù)庫(kù)系統(tǒng)階段、關(guān)系型數(shù)據(jù)庫(kù)、高級(jí)數(shù)據(jù)庫(kù)階段、“關(guān)系-對(duì)象”型數(shù)據(jù)庫(kù)。再然后學(xué)習(xí)了數(shù)據(jù)庫(kù)的類型:
(1)純文本數(shù)據(jù)庫(kù): 純文本數(shù)據(jù)庫(kù)是只用空格符、制表符和換行符來(lái)分割信息的文本文件。適用于小型應(yīng)用,對(duì)于大中型應(yīng)用來(lái)說(shuō)它存在諸多限制:
? 只能順序訪問(wèn),不能進(jìn)行隨機(jī)訪問(wèn)。? 查找數(shù)據(jù)和數(shù)據(jù)關(guān)系或多用戶同時(shí)訪問(wèn)進(jìn)行寫操作時(shí)非常困難。
(2)關(guān)系數(shù)據(jù)庫(kù):
由于純文本數(shù)據(jù)庫(kù)存在諸多局限,所以人們開(kāi)始研究數(shù)據(jù)模型,設(shè)計(jì)各種類型的使用方便的數(shù)據(jù)庫(kù)。在數(shù)據(jù)庫(kù)的發(fā)展史上,最具影響的數(shù)據(jù)庫(kù)模型有:層次模型、網(wǎng)狀模型和關(guān)系模型。其中,關(guān)系模型是目前應(yīng)用最廣泛和最有發(fā)展前途的一種數(shù)據(jù)模型,其數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)單,當(dāng)前主流的數(shù)據(jù)庫(kù)系統(tǒng)幾乎都采用關(guān)系模型。數(shù)據(jù)庫(kù)管理系統(tǒng):數(shù)據(jù)庫(kù)管理系統(tǒng)(Database Management System)是一種操縱和管理數(shù)據(jù)庫(kù)的大型軟件,是用于建立、使用和維護(hù)數(shù)據(jù)庫(kù),簡(jiǎn)稱DBMS。它對(duì)數(shù)據(jù)庫(kù)進(jìn)行統(tǒng)一的管理和控制,以保證數(shù)據(jù)庫(kù)的安全性和完整性。
MySQl特征:性能快捷、優(yōu)化SQL語(yǔ)言、容易使用、多用戶支持、可移植性和開(kāi)放源代碼、遵循國(guó)際標(biāo)準(zhǔn)和國(guó)際化支持、為多種編程語(yǔ)言提供API。
? mysql命令:mysql命令
mysql-h host_name-u user_name –ppassword ? h:當(dāng)連接MySQL服務(wù)器不在同臺(tái)主機(jī)時(shí),填寫主機(jī)名或IP地址 ? u:登錄MySQL的用戶名 ? p:登錄MySQL的密碼
? 注意:密碼如果寫在命令行的時(shí)候一定不能有空格。如果使用的系統(tǒng)為linux并且登陸用戶名字與MySQL的用戶名相同即可不用輸入用戶名密碼,linux默認(rèn)是以root登陸,windows默認(rèn)用戶是ODBC mysql程序常用命令:選定默認(rèn)數(shù)據(jù)庫(kù):use dbname;顯示所有數(shù)據(jù)庫(kù):show databases;顯示默認(rèn)數(shù)據(jù)庫(kù)中所有表:show tables;放棄正在輸入的命令:c;顯示命令清單:h;退出mysql程序:q;查看MySQL服務(wù)器狀態(tài)信息:s 接著我們講了數(shù)據(jù)庫(kù)基礎(chǔ)知識(shí),在此課中我們了解了數(shù)據(jù)庫(kù): 數(shù)據(jù)庫(kù)由一批數(shù)據(jù)構(gòu)成的有序集合,這些數(shù)據(jù)被分門別類地存放在一些結(jié)構(gòu)化的數(shù)
據(jù)表(table)里,而數(shù)據(jù)表之間又往往存在交叉引用的關(guān)系,這種關(guān)系使數(shù)據(jù)庫(kù)又被稱為關(guān)系型數(shù)據(jù)庫(kù) 檔案柜=數(shù)據(jù)庫(kù) 抽屜=表 文件=記錄
一、數(shù)據(jù)庫(kù)的組成以及功能
1、SQL語(yǔ)法組成:DML(Data Manipulation Language數(shù)據(jù)操作語(yǔ)言)
——查詢、插入、刪除和修改數(shù)據(jù)庫(kù)中的數(shù)據(jù); ——SELECT、INSERT、UPDATE、DELETE等;
DCL(Data Control Language數(shù)據(jù)控制語(yǔ)言)
——用來(lái)控制存取許可、存取權(quán)限等; ——GRANT、REVOKE 等;
DDL(Data Definition Language數(shù)據(jù)定義語(yǔ)言)——用來(lái)建立數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)對(duì)象和定義其列
——CREATE TABLE、DROP TABLE、ALTER TABLE 等 功能函數(shù)
——日期函數(shù)、數(shù)學(xué)函數(shù)、字符函數(shù)、系統(tǒng)函數(shù)等
2、MysQl數(shù)據(jù)庫(kù)增刪改查:
數(shù)據(jù)庫(kù)的操作:增、刪、改、查
增 create database name、刪 drop database name、查 show databases 改 沒(méi)有修改數(shù)據(jù)庫(kù)的語(yǔ)句、可以修改數(shù)據(jù)庫(kù)的名字
Myisan 直接進(jìn)入mysql data文件夾進(jìn)行修改、Innodb 不可以改名,只能重建 幾個(gè)重要的數(shù)據(jù)庫(kù):
Informatio_schema 存儲(chǔ)數(shù)據(jù)庫(kù)的各種信息用戶信息,列表信息,字符集信息等等?.Mysql用戶權(quán)限信息
Test 僅供用戶使用的測(cè)試數(shù)據(jù)庫(kù),可以隨意使用 Cluster 服務(wù)器數(shù)據(jù)集,不可以刪除
Phpmyadmin mysql圖形管理軟件的一種web
3、數(shù)據(jù)表的操作
Use 數(shù)據(jù)庫(kù)名; 增 create table 表名(字段名 字段類型[約束條件],字段名 字段類型[約束條件]。。)
刪 drop table 表名 改
查 show tables
4、數(shù)據(jù)類型種類:
? 數(shù)值型
分為整型和浮點(diǎn)型
? 整型:可以由十進(jìn)制和十六進(jìn)制表示
整數(shù)由數(shù)字序列組成,如:1,100。
由十六進(jìn)制表示方法:0x且后面加1—9和A—F 的任意數(shù)字或字母,并且0x中的X不能大寫。
? 浮點(diǎn)型:
浮點(diǎn)數(shù)由一個(gè)數(shù)字加一個(gè)小數(shù)點(diǎn)再加上一個(gè)數(shù)字組成。兩個(gè)數(shù)字序列不能同時(shí)為空。
數(shù)值列的完整性約束
(1)AUTO_INCREMENT 自動(dòng)標(biāo)識(shí)列,在需要產(chǎn)生唯一標(biāo)志符號(hào)或者順序值時(shí)候,可用此屬性。值一般從1開(kāi)始,每行增加1,在插入NULL到一個(gè)AUTO_INCREMENT列時(shí),MySQL會(huì)插入一個(gè)比該列中當(dāng)前最大值大1 的值,一個(gè)表中最多能有一個(gè)有此屬性的列。對(duì)于想使用此屬性的列應(yīng)該定義為NOT NULL,并定義為PRIMARY KEY 或者定義為UNIQUE鍵。
舉例:
create table t(id int auto_increment not null primary key);(2)UNSIGNED 無(wú)符號(hào),此屬性禁用負(fù)值,將數(shù)值的取值范圍從零開(kāi)始。舉例:
create table t(num tinyint , num2 tinyint unsigned);(3)NULL和NOT NULL 默認(rèn)為NULL,即插入值時(shí)沒(méi)有在此字段插入值時(shí)自動(dòng)填NULL,如果指定了NOT NULL,則必須在插入值時(shí)在此字段添入值,不允許插入NULL值。(4)DEFAULT 可以通過(guò)此屬性來(lái)指定一個(gè)缺省值,即如果沒(méi)有在此列添加值,那么默認(rèn)添加DEFAULT后指定值。(5)ZEROFILL 前導(dǎo)零填充數(shù)值類型值以達(dá)到列的顯示寬度。
舉例:
create table test2(num1 int default 1,num2 int zerofill);CHAR和VARCHAR類型:
CHAR類型和VARCHAR類型長(zhǎng)度范圍都是0~255之間的大小。他們之間的差別在于MySQL處理存儲(chǔ)的方式:
CHAR把這個(gè)大小視為值的準(zhǔn)確大?。ㄓ每崭裉钛a(bǔ)比較短的值)。
VARCHAR類型把它視為最大值并且只使用了存儲(chǔ)字符串實(shí)際上需要的字節(jié)數(shù)(增加了一個(gè)額外的字節(jié)記錄長(zhǎng)度)。因而,較短的值當(dāng)被插入一個(gè)語(yǔ)句為VARCHAR類型的字段時(shí),將不會(huì)用空格填補(bǔ)(然而,較長(zhǎng)的值仍然被截短)。
5、創(chuàng)建數(shù)據(jù)庫(kù):
建立數(shù)據(jù)庫(kù)操作:
語(yǔ)法:create database 數(shù)據(jù)庫(kù)名
敘述:創(chuàng)建一個(gè)具有指定名稱的數(shù)據(jù)庫(kù)。如果要?jiǎng)?chuàng)建的數(shù)據(jù)庫(kù)已經(jīng)存在,或者沒(méi)有創(chuàng)建它的適當(dāng)權(quán)限,則此語(yǔ)句失敗。例:建立一個(gè)student庫(kù)。
mysql> create database student;創(chuàng)建表:建立表操作:
語(yǔ)法:create table 表名(? 列名1 列類型 [<列的完整性約束>], ? 列名2 列類型 [<列的完整性約束>], ?......);敘 述:在當(dāng)前數(shù)據(jù)庫(kù)下新創(chuàng)建一個(gè)數(shù)據(jù)表。
列類型:表示該列的數(shù)據(jù)類型。例:
建立一個(gè)表school,其由兩列組成,第一列屬性為非空,并做為主鍵,并自增
? create table school(? school_id int(10)not null auto_increment primary key, ? school_name varchar(20)
?);
6、主鍵與外鍵:數(shù)據(jù)表之間的關(guān)聯(lián)/引用關(guān)系是依靠具體的主鍵(primary key)和外鍵(foreign key)建立起來(lái)的。
(1)主鍵:幫助MySQL以最快的速度把一條特點(diǎn)的數(shù)據(jù)記錄的位置確定下來(lái)。
主鍵必須是唯一的
主鍵應(yīng)該是緊湊的,因此整數(shù)類型比較適合
主鍵
create table student(sid int not null auto_increment, name varchar(20)not null, primary key(sid));(2)外鍵:引用另外一個(gè)數(shù)據(jù)表的某條記錄。
外鍵列類型盡可能與主鍵列類型保持一致 外鍵列應(yīng)該加上NOT NULL 外鍵(自動(dòng)檢查外鍵是否匹配,僅適用InnoDB)
create table score(cid int not null auto_increment primary key, score int, sid int, foreign key(sid)references student(sid));
7、刪除數(shù)據(jù)庫(kù)或表操作
? 刪除表操作
語(yǔ)法:drop table [if exists] tab_name [,tab_name]...敘述:從數(shù)據(jù)庫(kù)中刪除給定的表。如果給出if exists 子句,則刪除不存在的表不會(huì)出錯(cuò)。
? 刪除數(shù)據(jù)庫(kù)操作
語(yǔ)法:drop database [if exists] db_name 敘述:刪除給定的數(shù)據(jù)庫(kù)。在刪除一個(gè)數(shù)據(jù)庫(kù)后,它就永遠(yuǎn)沒(méi)有了,因此要特別小心。如果給出if exists 子句,則刪除不存在的數(shù)據(jù)庫(kù)不會(huì)出錯(cuò)。
更改表結(jié)構(gòu)操作:
?
語(yǔ)法:alter table 表名 action;? 說(shuō)明:action 可以是如下語(yǔ)句:
? add 列名 建表語(yǔ)句 [first | after 列名] 可以為表添加一列,如果沒(méi)指定first或者after,則在列尾添加一列,否則在指定列添加新列
? add primary key(列名)為表添加一個(gè)主鍵,如果主鍵已經(jīng)存在,則出現(xiàn)錯(cuò)誤
? add foreign key(列名)references 表名(列名)為表添加一個(gè)外鍵
? alter 列名 set default 默認(rèn)值
可以更改指定列默認(rèn)值
舉例1:
向people表中添加字段address2,類型為varchar,最大長(zhǎng)度為100 ? alter table people add address2 varchar(100);
8、插入記錄操作
? 敘述:
如果表名后面沒(méi)寫字段名,則默認(rèn)是向所有的字段添加值,另外字符串值應(yīng)該用‘ ’或“ ”引號(hào)括起來(lái)
? 舉例1:向people表中添加一條記錄:
insert into people(name,age)
values(“zhangsan”,20);多表查詢—分類
? 連接查詢
? 同時(shí)涉及多個(gè)表的查詢稱為連接查詢 ? 用來(lái)連接兩個(gè)表的條件稱為連接條件
? 內(nèi)連接(INNER JOIN)? 外連接
——左外聯(lián)結(jié)(LEFT JOIN)——右外聯(lián)結(jié)(RIGHT JOIN)
二、算數(shù)運(yùn)算符
(1)用字符串表示的數(shù)字在任何可能便于計(jì)算的地方都被自動(dòng)地轉(zhuǎn)換為數(shù)字。當(dāng)執(zhí)行轉(zhuǎn)換時(shí),MySQL遵循兩個(gè)基本規(guī)則:
? 如果第一位是數(shù)字的字符串被用于一個(gè)算數(shù)運(yùn)算中,那么它被轉(zhuǎn)換為這個(gè)數(shù)字的值。? 如果一個(gè)包含字符和數(shù)字混合的字符串不能被正確的轉(zhuǎn)換為數(shù)字,那么它被轉(zhuǎn)換成0。
(2)比較運(yùn)算符
? 比較運(yùn)算符允許我們對(duì)表達(dá)式的左邊和右邊進(jìn)行比較。一個(gè)比較運(yùn)算符的結(jié)果總是1(真),0(假),或是為NULL(不能確定)。? 比較運(yùn)算符可以用于比較數(shù)字和字符串。數(shù)字作為浮點(diǎn)值比較,而字符串以不區(qū)分大小寫的方式進(jìn)行比較(除非使用特殊的BINARY二進(jìn)制關(guān)鍵字)
在第二章中我們學(xué)習(xí)到了數(shù)據(jù)庫(kù)的連接。
1、mysql 連接:
七劍下天山
// 第一賤:連接數(shù)據(jù)庫(kù)
? mysql_connect — 打開(kāi)一個(gè)到 MySQL 服務(wù)器的連接
? mysql_pconnect — 打開(kāi)一個(gè)到 MySQL 服務(wù)器的持久連接
? //resource mysql_connect([ string $server [, string $username [, string
$password [, bool $new_link [, int $client_flags ]]]]])(在php手冊(cè)中有 ? //mysql 連接:
? // mysql_connect 非持久連接,效率較低,對(duì)資源消耗小 ? // mysql_pconnect 持久連接,效率高,消耗大量的資源 ? $link=mysql_connect('localhost:3306','root','root');? var_dump($link);// 第二賤:判斷連接是否成功
? //第二賤:判斷連接是否成功//mysql_errno — 返回上一個(gè) MySQL 操作中的錯(cuò)誤信息的數(shù)字編碼
? //mysql_error — 返回上一個(gè) MySQL 操作產(chǎn)生的文本錯(cuò)誤信息
? //echo mysql_errno();正確返回0,錯(cuò)誤返回一個(gè)正整數(shù),輸出最近一次的mysql錯(cuò)誤。
// 第三賤:設(shè)置字符集
? bool mysql_set_charset(string $charset [, resource $link_identifier ])? //mysql_set_charset — Sets the client character set ? //bool mysql_set_charset(string $charset [, resource $link_identifier ])? mysql_set_charset('utf8');// 第四賤:選擇數(shù)據(jù)庫(kù)
? //mysql_select_db — 選擇 MySQL 數(shù)據(jù)庫(kù) ? mysql_select_db('company11');? mysql_select_db — 選擇 MySQL 數(shù)據(jù)庫(kù) ? 說(shuō)明
? bool mysql_select_db(string $database_name [, resource $ link_identifier ])? 成功時(shí)返回 TRUE,或者在失敗時(shí)返回 FALSE.? mysql_select_db()設(shè)定與指定的連接標(biāo)識(shí)符所關(guān)聯(lián)的服務(wù)器上的當(dāng)前激活數(shù)據(jù)庫(kù)。如果沒(méi)有指定連接標(biāo)識(shí)符,則使用上一個(gè)打開(kāi)的連接。如果沒(méi)有打開(kāi)的連接,本函數(shù)將無(wú)參數(shù)調(diào)用 mysql_connect()來(lái)嘗試打開(kāi)一個(gè)并使用之。
// 第五賤:準(zhǔn)備并且發(fā)送sql語(yǔ)句
? //$sql='select * from biao';? //mysql_query($sql)//mysql_query — 發(fā)送一條 MySQL 查詢
//resource mysql_query(string $query [, resource $link_identifier ])// 第六賤: 判斷執(zhí)行結(jié)果,或者遍歷結(jié)果集
? //增刪改的判斷
? $result=mysql_query($sql);(放入第五賤)? if($result && mysql_affected_rows()){ ?
echo '執(zhí)行成功';? }else{ ?
echo '執(zhí)行失敗,或者不存在數(shù)據(jù)';? } ? $sql=“insert into zhiyuan(name,sex,bumen)values('zhou',0,2)”;? $sql=“update zhiyuan set bumen=3 where name='小王'”;? $sql=“insert into zhiyuan(name,sex,bumen)values('小王',0,2)”;// 第七賤:萬(wàn)賤歸宗 */
之后,學(xué)習(xí)了面向?qū)ο蟆?/p>
1、面對(duì)對(duì)象技術(shù)的基本觀點(diǎn)如下:
(1)客觀世界由對(duì)象組成。
(2)具有相同數(shù)據(jù)(屬性)和操作(方法)的對(duì)象可歸納成類。
(3)類可以派生出子類,子類除了繼承父類的全部特性外還可以有自己的特性(4)對(duì)象之間的聯(lián)系通過(guò)消息傳遞(可理解為方法調(diào)用)來(lái)維系。
假設(shè)m1是類Manager的一個(gè)實(shí)例(或?qū)ο?,當(dāng)外界要求把這個(gè)對(duì)象所 代表的那位經(jīng)理的級(jí)別改變?yōu)?時(shí),就應(yīng)以下面的方式向這個(gè)對(duì)象發(fā)出一條消息: ml.ChangeLevel(2)消息傳遞
PHP的WEB技術(shù)面向?qū)ο笫欠略飕F(xiàn)實(shí)對(duì)象建立的,他們也有狀態(tài)和行為。軟件對(duì)象在一個(gè) 或多個(gè)變量中維護(hù)它的狀態(tài)。變量是一個(gè)由標(biāo)識(shí)符命名的數(shù)據(jù)項(xiàng)。對(duì)象用方法實(shí)現(xiàn)它的行為。方法是與一個(gè)對(duì)象相關(guān)聯(lián)的函數(shù)(子過(guò)程)。
? 對(duì)象有二個(gè)性質(zhì):狀態(tài)(state)和行為(behavior)。? 對(duì)象是一個(gè)封裝數(shù)據(jù)屬性和操作行為的實(shí)體.2、面向?qū)ο?/p>
將相關(guān)的變量和方法封裝進(jìn)一個(gè)簡(jiǎn)潔的軟件組合是一種簡(jiǎn)單而強(qiáng)大的思想,它給軟件開(kāi)發(fā)人員提供了兩個(gè)主要的好處:
模塊化:一個(gè)對(duì)象的源代碼可以獨(dú)立于其他對(duì)象的源代碼進(jìn)行編寫和維護(hù)。另外,對(duì)象很容易地在系統(tǒng)中傳遞。你可以將你的自行車對(duì)象交給其他人,而它仍然會(huì)正常工作。(重構(gòu)、代碼復(fù)用)
隱藏信息:對(duì)象有一個(gè)公共接口,其他對(duì)象可以使用這個(gè)接口與它通信。對(duì)象可以維護(hù)私有的信息和方法,可以在任何時(shí)候改變這些信息和方法,而不影響依賴于它的其他對(duì)象。你不需要理解你自行車使用的變速齒輪機(jī)制就能夠使用它。即是:封裝
3、類
類是一組具有相同數(shù)據(jù)結(jié)構(gòu)和相同操作對(duì)象的集合。
在現(xiàn)實(shí)世界中,常常有相同類型的許多對(duì)象。例如,你的自行車只是世界上的許多自行車之一。用面向?qū)ο蟮男g(shù)語(yǔ)來(lái)說(shuō),你的自行車對(duì)象是自行車類的一個(gè)實(shí)例。自行車有一些共有的狀態(tài)(當(dāng)前的變速齒輪、當(dāng)前的步調(diào)、兩個(gè)輪子)和行為(改變變速齒輪、剎車)。但是,每輛自行車狀態(tài)獨(dú)立于其他自行車狀態(tài),也就說(shuō)每輛自行車的狀態(tài)可以互不相同。
? function jia($no1,$no2){ ?
return $no1+$no2;? } ? function jian($no1,$no2){ ?
return $no1-$no2;? } ? function cheng($no1,$no2){ ?
return $no1*$no2;? } ? function chu($no1,$no2){ ?
return $no1/$no2;? } ? function max(){
? echo '我是最大值';? }
4、類的成員-字段(1)、聲明字段 name;?>(2)使用字段
? 與變量不同,使用字段要使用->操作符,而不是美元符號(hào)
– $employee=new Staff();– echo $employee->name;? 當(dāng)在定義字段的類中引用字段時(shí)要使用$this關(guān)鍵字。$this表示當(dāng)前類
5、、構(gòu)造函數(shù)
構(gòu)造函數(shù)是類中的一個(gè)特殊函數(shù),當(dāng)使用 new 操作符創(chuàng)建一個(gè)類的實(shí)例時(shí),構(gòu)造函數(shù)將會(huì)自動(dòng)調(diào)用。
Php5中以__construct()作為構(gòu)造函數(shù)。而php4中是以將和類名相同的函數(shù)作為構(gòu)造函數(shù)。為了兼容php5先尋找__construct(),如果找不到再尋找以類名命名的構(gòu)造函數(shù)
如果一個(gè)類沒(méi)有構(gòu)造函數(shù),則調(diào)用基類的構(gòu)造函數(shù) Class Staff { function __construct()//兩個(gè)下劃線 { echo “調(diào)用了構(gòu)造函數(shù)”;} function Staff(){ echo “調(diào)用了構(gòu)造函數(shù)2”;} } $employee=new Staff();? //構(gòu)造方法 函數(shù)
? //特點(diǎn),就是在new 的時(shí)候也就是調(diào)用這個(gè)殼的時(shí)候就進(jìn)行了調(diào)用的方法
? //寫法:php4中只認(rèn)識(shí)一種 類名和函數(shù)名相同的話,那個(gè)函數(shù)就是使構(gòu)造方法 ? //php5中 類名和函數(shù)名相同/__construct()都是構(gòu)造方法
? //注意:構(gòu)造方法在類中只能有一個(gè) 不要寫多個(gè) 使用PHP4的或者PHP5的兩個(gè)相同構(gòu)造方法會(huì)報(bào)重載錯(cuò)誤
? //但是如果一個(gè)PHP4的一個(gè)PHP5的構(gòu)造方法就不會(huì)報(bào)錯(cuò),但是邏輯有問(wèn)題
? //構(gòu)造方法的參數(shù)傳值,是在調(diào)用類的時(shí)候()放的就是為構(gòu)造方法準(zhǔn)備的參數(shù) //析構(gòu)方法 函數(shù) __destruct()? //特點(diǎn),析構(gòu)方法是在調(diào)用完之后,自動(dòng)執(zhí)行 在接收類調(diào)用的變量改值的時(shí)候/或者頁(yè)面結(jié)束 自動(dòng)啟動(dòng)
? //聲明關(guān)鍵字 [private protected public var ]
6、析構(gòu)函數(shù)
(1)析構(gòu)函數(shù)會(huì)在到某個(gè)對(duì)象的所有引用都被刪除或者當(dāng)對(duì)象被顯式銷毀時(shí)執(zhí)行。腳本執(zhí)行結(jié)束時(shí),php會(huì)撤銷內(nèi)存中的所有對(duì)象,因此如果實(shí)例化時(shí)創(chuàng)建的信息都會(huì)保留到內(nèi)存中,就不需要顯式的聲明析構(gòu)函數(shù)。但是如果創(chuàng)建了不那么容易丟失的數(shù)據(jù)時(shí)(例如連接數(shù)據(jù)庫(kù))就應(yīng)當(dāng)定制析構(gòu)函數(shù)進(jìn)行銷毀數(shù)據(jù)。Class Staff { function __construct(){ echo “調(diào)用了構(gòu)造函數(shù)”;} function __destruct(){ echo “調(diào)用了析構(gòu)函數(shù),需要釋放和銷毀的“;} } $employee=new Staff();(2)類的成員-屬性_set()__set()//兩個(gè)下劃線
$this->$propname=$propvalue;
print ”ok
“;} } $model=new Test();$model->age=25;$model->title=”English“;echo ”
“;print ”age: “.$model->age.”
“;echo ”
“;print ”title: “.$model->title.”
“;?> 可用來(lái)驗(yàn)證某個(gè)屬性是否存在或增加新的屬性
7、控制對(duì)類的成員訪問(wèn)
(1)public :在任何位置都可以讀取和修改這個(gè)成員變量或者調(diào)用這個(gè)方法。這個(gè)修飾符在外部代碼使用,由給定類中的代碼使用,或者在擴(kuò)展給定類的功能的類中使用。
(2)private : 只有這個(gè)類中的代碼才能讀取和修改私有變量或者調(diào)用私有成員函數(shù)。其他代碼、類或者擴(kuò)展這個(gè)類的功能類(子類)不能使用私有條目。
(3)protected : 外部代碼與給定類不相關(guān)的其他類不能讀取或者修改使用了關(guān)鍵字protected的成員變量,也不能調(diào)用受保護(hù)的成員函數(shù)。(4)abstract 定義抽象類
(5)final 子類方法不允許覆蓋父類方法 先了解,下一章重點(diǎn)闡述
8、靜態(tài)類成員
當(dāng)需要一些所有類對(duì)象共享的字段和方法時(shí)就需要?jiǎng)?chuàng)建一些靜態(tài)的字段和方法。Class Staff { public static $name=”靜態(tài)字段“;static function show(){
echo self::$name,”
“;} } echo Staff::$name,”
“;Staff::show();
9、常量
常量(const)即不會(huì)在類中改變的值,對(duì)于該類的任何實(shí)例化的對(duì)象來(lái)說(shuō) 常量值在這些對(duì)象的整個(gè)生命周期中都保持不變 Class Staff { const CITY=“北京”;} echo Staff::CITY;
之后,學(xué)習(xí)了PHP正則表達(dá)式
1、正則表達(dá)式簡(jiǎn)介
正則表達(dá)式是用于描述字符排列模式一種語(yǔ)法規(guī)則。它主要用于字符串的模式分割、匹配、查找及替換操作。到目前為止,我們前面所用過(guò)的精確(文本)匹配也是一種正則表達(dá)式。
在PHP中,正則表達(dá)式一般是由正規(guī)字符和一些特殊字符(類似于通配符)聯(lián)合構(gòu)成的一個(gè)文本模式的程序性描述。
在程序語(yǔ)言中,通常將模式表達(dá)式(即正則表達(dá)式)包含在兩個(gè)反斜線“/”之間,如“/apple/”。用戶只要把需要匹配的模式內(nèi)容放入定界之間即可。
如果使用一個(gè)沒(méi)有特殊字符的正則表達(dá)式,相當(dāng)于純文本搜索,使用strstr()函數(shù)也可達(dá)到同樣的效果。
2、^ 和 $ ”^The“: 開(kāi)頭一定要有”The“字符串;”of despair$“: 結(jié)尾一定要有”of despair“ 的字符串;那么, ”^abc$“: 就是要求以abc開(kāi)頭和以abc結(jié)尾的字符串,實(shí)際上是只有abc匹配
”notice“: 匹配包含notice的字符串 你可以看見(jiàn)如果你沒(méi)有用我們提到的兩個(gè)字符(最后一個(gè)例子),就是說(shuō) 模式(正則表達(dá)式)可以出現(xiàn)在被檢驗(yàn)字符串的任何地方,你沒(méi)有把他鎖定到兩邊(開(kāi)始或結(jié)束)
3、'*', '+',和 '?', * 表示出現(xiàn)0次或1次或多次 相當(dāng)于{0,}, + 表示出現(xiàn)1次或多次 相當(dāng)于{1,}, ? 表示出現(xiàn)0次或1次 相當(dāng)于{0,1}, 這里是一些例子: ”ab*“: 和ab{0,}同義,匹配以a開(kāi)頭,后面可以接0個(gè)或者N個(gè)b組成的字符串(”a“, ”ab“, ”abbb“, 等);”ab+“: 和ab{1,}同義,同上條一樣,但最少要有一個(gè)b存在(”ab“, ”abbb“, 等.);”ab?“:和ab{0,1}同義,可以沒(méi)有或者只有一個(gè)b;”a?b+$“: 匹配以一個(gè)或者0個(gè)a再加上一個(gè)以上的b結(jié)尾的字符串.要點(diǎn), '*', '+',和 '?'只管它前面那個(gè)字符.4、[ ] 中括號(hào)括住的內(nèi)容只匹配一個(gè)單一的字符
”[ab]“: 匹配單個(gè)的 a 或者 b(和 ”a|b“ 一樣);”[a-d]“: 匹配'a' 到'd'的單個(gè)字符(和”a|b|c|d“ 還有 ”[abcd]“效果一樣);一般我們都用[a-zA-Z]來(lái)指定字符為一個(gè)大小寫英文 ”^[a-zA-Z]“: 匹配以大小寫字母開(kāi)頭的字符串 ”[0-9]%“: 匹配含有 形如 x% 的字符串
”,[a-zA-Z0-9]$“: 匹配以逗號(hào)再加一個(gè)數(shù)字或字母結(jié)尾的字符串
5、正則表達(dá)式的語(yǔ)法規(guī)則
正則表達(dá)式是主要由: ? 原子(普通字符,如英文字符)? 元字符(有特殊功用的字符)? 以及模式修正字符組成。
一個(gè)正則表達(dá)式中至少包含一個(gè)原子。
6、PHP中的正則表達(dá)式函數(shù)
在PHP中有兩套正則表達(dá)式函數(shù)庫(kù)。
? 一套是由PCRE(Perl Compatible Regular Expression)庫(kù)提供的。PCRE庫(kù)使用和perl相同的語(yǔ)法規(guī)則實(shí)現(xiàn)了正則表達(dá)式的模式匹配,其使用以“preg_”為前綴命名的函數(shù)。
? 另一套是由POSIX(Portable Operation System interface)擴(kuò)展庫(kù)提供的。POSIX擴(kuò)展的正則表達(dá)式由POSIX 1003.2定義,一般使用以“ereg_”為前綴命名的函數(shù)。
? 兩套函數(shù)庫(kù)的功能相似,執(zhí)行效率稍有不同。一般而言,實(shí)現(xiàn)相同的功能,使用PCRE庫(kù)的效率略占優(yōu)勢(shì)。
7、、正則表達(dá)式的拆分
1split()和spliti()函數(shù)原型:
? array split(string $pattern,string $string[,int $limit])本函數(shù)返回一個(gè)字符串?dāng)?shù)組,每個(gè)單元為$string經(jīng)正則表達(dá)式$pattern作為邊界分割出的子串。如果設(shè)定了$limit,則返回的數(shù)組最多包含$limit個(gè)單元。而其中最后一個(gè)單元包含了$string中剩余的所有部分。Spliti是split的忽略大小版本。
之后,學(xué)習(xí)了文件系統(tǒng)處理。
open()打開(kāi)文件或者URL $file=fopen('1.txt','r');//只讀模式打開(kāi) //r 只能讀取不能寫入
//r+ 增強(qiáng)的讀寫模式 表示以只讀模式打開(kāi),但是仍然可以進(jìn)行部分的寫入操作 //w 寫模式 打開(kāi)文件的時(shí)候,原有內(nèi)容會(huì)被清空 如果文件不存在就新建一個(gè)文件,再打開(kāi)
//w+ 增強(qiáng)的讀寫模式
//a 追加模式(寫)不會(huì)清空原有文件而是在源文件的基礎(chǔ)上進(jìn)行累加 不存在也可以新建
//a+ 增強(qiáng)的追加模式(讀寫)/x異或模式 文件存在就報(bào)錯(cuò),不存在就創(chuàng)建 //x+增強(qiáng)的異或模式 //b 打開(kāi)二進(jìn)制文件
1、文件的打開(kāi)
2、文件的刪除
//rename('1.txt','1.exe');/ /刪除
rmdir('C')//刪除空目錄 ?>
3、什么是文件系統(tǒng)
就是對(duì)系統(tǒng)或者服務(wù)器中的文件進(jìn)行操作,增刪改查,文件的上傳和下載
4、文件系統(tǒng)能做什么?
a)文件緩存的應(yīng)用 b)配置文件的應(yīng)用
c)FTP站點(diǎn)主要是FTP下載站 d)站點(diǎn)頁(yè)面的靜態(tài)化 e)文件的上傳和下載。
5、文件下載:查找 header
header('content-type:image/gif');//告訴瀏覽器你的文件描述
header('Content-Disposition: attachment;filename=”baidu.gif"');//告訴瀏覽器文件的大小
header('content-length'.filesize('baidu.gif'));//顯示內(nèi)容
readfile('baidu.gif');?>
三、個(gè)人收獲
學(xué)習(xí)PHP的過(guò)程做一下概括:
(1)熟悉HTML/CSS/JS等網(wǎng)頁(yè)基本元素,完成階段可自行制作完整的網(wǎng)頁(yè),對(duì)元素屬性達(dá)到熟悉程度
(2)理解動(dòng)態(tài)語(yǔ)言的概念,運(yùn)做機(jī)制,熟悉PHP語(yǔ)法
(3)學(xué)習(xí)如何將PHP與HTML結(jié)合起來(lái)完成簡(jiǎn)單動(dòng)態(tài)頁(yè)面
(4)接觸MYSQL,開(kāi)始設(shè)計(jì)數(shù)據(jù)庫(kù)程序
(5)不斷鞏固,摸透大部分PHP常用函數(shù),并可理解OOP,MYSQL優(yōu)化,以及模板
(6)完成一個(gè)功能齊全的動(dòng)態(tài)站點(diǎn)
通過(guò)這段時(shí)間的學(xué)習(xí),自己受益匪淺,知道了很多關(guān)于PHP的東西,學(xué)會(huì)了很多內(nèi)容。在這堂課的學(xué)習(xí)過(guò)程中我認(rèn)真聽(tīng)講,上機(jī)認(rèn)真練習(xí),遇到難題,自己思考與探索,不斷地尋求進(jìn)步,請(qǐng)教老師和同學(xué),雖然上半年沒(méi)有學(xué)習(xí)這門課程,不過(guò)老師講課非常仔細(xì),然后同學(xué)們一步步自己跟著老師做,還是能跟得上,等著以后自己做畢業(yè)設(shè)計(jì)也有一定的幫助。
第五篇:PHP基礎(chǔ)總結(jié)
1、在HTML嵌入PHP腳本有三種辦法:
<scriptlanguage=“php”>
//嵌入方式一
echo(“test”);
</script>
<?
//嵌入方式二
echo“<br>test2”;
?>
<?php
//嵌入方式三
echo“<br>test3”;
?>
還有一種嵌入方式,即使用和Asp相同的標(biāo)記<%%>,但要修改PHP.ini 相關(guān)配置,不推薦使用。
2、PHP注釋分單行和多行注釋,和java注釋方式相同。
<?
//這里是單行注釋
echo“test”;
/*
這里是多行注釋!可以寫很多行注釋內(nèi)容
*/
?>
注意不要有嵌套注釋,如/*aaaa/*asdfa*/asdfasdfas*/,這樣的注釋會(huì)出現(xiàn)問(wèn)題。
3、PHP主要的數(shù)據(jù)類型有5種,integer,double,string,array,object。
4、函數(shù)內(nèi)調(diào)用函數(shù)外部變量,需要先用global進(jìn)行聲明,否則無(wú)法訪問(wèn),這是PHP與其他程序語(yǔ)言的一個(gè)區(qū)別。事例代碼:
<?
$a=1;
functiontest(){
echo$a;
}
test();//這里將不能輸出結(jié)果“1”。
functiontest2(){
global$a;
echo$a;
}
test2();//這樣可以輸出結(jié)果“1”。
?>
注意:PHP可以在函數(shù)內(nèi)部聲明靜態(tài)變量。用途同C語(yǔ)言中。
5、變量的變量,變量的函數(shù)
<?
//變量的變量
$a=“hello”;
$$a=“world”;
echo“$a$hello”;//將輸出“helloworld”
echo“$a${$a}”;//同樣將輸出“helloworld”
?>
<?
//變量的函數(shù)
functionfunc_1(){
print(“test”);
}
functionfun($callback){
$callback();
}
fun(“func_1”);//這樣將輸出“test”
?>
6、PHP同時(shí)支持標(biāo)量數(shù)組和關(guān)聯(lián)數(shù)組,可以使用list()和array()來(lái)創(chuàng)建數(shù)組,數(shù)組下標(biāo)從0開(kāi)始。如:
<?
$a[0]=“abc”;
$a[1]=“def”;
$b[“foo”]=13;
$a[]=“hello”;//$a[2]=“hello”
$a[]=“world”;//$a[3]=“world”
$name[]=“jill”;//$name[0]=“jill”
$name[]=“jack”;//$name[1]=“jack”
?>
7、關(guān)聯(lián)參數(shù)傳遞(&的使用),兩種方法。例:
<?
//方法一:
functionfoo(&$bar){
$bar.=“andsomethingextra”;
}
$str=“ThisisaString,”;
foo($str);
echo$str;//output:ThisisaString,andsomethingextra
echo“<br>”;
//方法二:
functionfoo1($bar){
$bar.=“andsomethingextra”;
}
$str=“ThisisaString,”;
foo1($str);
echo$str;//output:ThisisaString,echo“<br>”;
foo1(&$str);
echo$str;//output:ThisisaString,andsomethingextra
?>
8、函數(shù)默認(rèn)值。PHP中函數(shù)支持設(shè)定默認(rèn)值,與C++風(fēng)格相同。
<?
functionmakecoffee($type=“coffee”){
echo“makingacupof$type.n”;
}
echomakecoffee();//“makingacupofcoffee”
echomakecoffee(“espresso”);//“makingacupofespresso”
/*
注意:當(dāng)使用參數(shù)默認(rèn)值時(shí)所有有默認(rèn)值的參數(shù)應(yīng)該在無(wú)默認(rèn)值的參數(shù)的后邊定義。否則,程序?qū)⒉粫?huì)按照所想的工作。
*/
functiontest($type=“test”,$ff){//錯(cuò)誤示例
return$type.$ff;
}
9、PHP的幾個(gè)特殊符號(hào)意義。
$變量
&變量的地址(加在變量前)
@不顯示錯(cuò)誤信息(加在變量前)
->類的方法或者屬性
=>數(shù)組的元素值
?:三元運(yùn)算子
10、include()語(yǔ)句與require()語(yǔ)句
如果要根據(jù)條件或循環(huán)包含文件,需要使用include()。
require()語(yǔ)句只是被簡(jiǎn)單的包含一次,任何的條件語(yǔ)句或循環(huán)等對(duì)其無(wú)效。
由于include()是一個(gè)特殊的語(yǔ)句結(jié)構(gòu),因此若語(yǔ)句在一個(gè)語(yǔ)句塊中,則必須把他包含在一個(gè)語(yǔ)句塊中。
<?
//下面為錯(cuò)誤語(yǔ)句
if($condition)
include($file);
else
include($other);
//下面為正確語(yǔ)句
if($condition){
include($file);
}else
{
include($other);
}
?>