1. php的其他方面
PHP 在資料庫方面的豐富支持,也是它迅速走紅的原因之一,它支持下列的資料庫或是數據文件:
Adabas 、D、 DBA、dBase 、dbm 、filePro 、Informix 、InterBase、mSQL 、Microsoft SQL Server、·MySQL、Solid、Sybase、 Oracle 、PostgreSQL
而在 Internet 上它也支持了相當多的通訊協議 (protocol),包括了與電子郵件相關的 IMAP,POP3;網管系統 SNMP;網路新聞NNTP;帳號共用 NIS;全球信息網 HTTP 及 Apache 伺服器;目錄協議 LDAP 以及其它網路的相關函數。
除此之外,用 PHP 寫出來的 Web 後端 CGI 程序,可以很輕易的移植到不同的操作系統上。例如,先以 linux 架的網站,在系統負荷過高時,可以快速地將整個系統移到 SUN 工作站上,不用重新編譯 CGI 程序。面對快速發展的 Internet,這是長期規劃的最好選擇。
相關語法及概念
php 支持八種原始類型。
四種標量類型:boolean(布爾型) integer(整型) float(浮點型,也作「double」) string(字元串)
兩種復合類型:array(數組)object(對象)
最後是兩種特殊類型:resource(資源)NULL
為了確保代碼的易讀性,本手冊還介紹了一些偽類型:mixed、number、callback
語法(例子中均忽略了PHP代碼邊界符 <?php ?>):
注釋的語法有三種: //comment這個是單行注釋/*comment*/這個是多行注釋#comment這個是腳本類型注釋,很少用基本的結構控制語句: //分支結構(選擇結構)if(condition){//Statement}if(condition){//Statement}else{//Statement}if(condition){//Statement}elseif(condition){//Statement}//多分支結構switch($變數){case'值'://Statementbreak;case'值2'://Statementbreak;default://Statement}//循環結構while(condition){//Statement}do{//Statement}while(condition);for(初始化;判斷;變化){//Statement}//數組遍歷專用循環語句foreach($Arrayas$value){echo$value;}foreach($Arrayas$key=>$value){echo$key;echo$value;}一個PHP實例: <html><head><title>Firstprogram</title></head><body>//php中string類型的拼接符和其它大多數採用+號運算符不一樣,而是採用.號運算//在一般語言中用於對象屬性和方法調用的.運算符,則和C語言的結構體一樣用=><?phpechohelloworld.!;?></body></html>php對面向對象的支持
面向對象編程的概念:
不同的作者之間說法可能不一樣,但是一個OOP語言必須有以下幾方面:
1.抽象數據類型和信息封裝
2.繼承
3.多態
在PHP中是通過類來完成封裝的: //在OOP類中,通常採用大雙駝峰命名法,每個單詞的首字母都大寫classSomething{//作用域修飾符:public公共的;private私有的;protected受保護的;//屬性的名稱一般用全小寫private$x=null;//在編程建議中,內部使用的屬性應該給私有修飾符,然後通過方法取值賦值//方法的名稱一般用小駝峰命名法,第一個單詞全小寫,剩下的單詞首字母大寫//因為PHP不會自動為變數使用$this所以必須主動加上$this偽變數來指向操作的對象publicfunctionsetX($v){$this->x=$v;}publicfunctiongetX(){return$this->x;}}當然你可以按自己的喜好進行定義,但最好保持一種標准,這樣會更有效。數據成員在類中使用var聲明來定義,在給數據成員賦值之前,它們是沒有類型的。一個數據成員可以是一個整數,一個數組,一個相關數組(associative array)或者是一個對象。方法在類中被定義成函數形式,在方法中訪問類成員變數時,你應該使用$this->name,否則對一個方法來說,它只能是局部變數。
使用new操作符來創建一個對象: $obj=newSomething;然後你可以使用成員函數通過: $obj->setX(5);$see=$obj->getX();echo$see;在這個例子中,setX成員函數將5賦值給對象的成員變數x(不是類的),然後getX返回它的值5。可以象:$obj->x=6那樣通過類引用方式來存取數據成員,這不是一個很好的OOP習慣。我強烈建議通過方法來存取成員變數。如果你把成員變數看成是不可處理的,並且只通過對象句柄來使用方法,你將是一個好的OOP程序員。不幸的是,PHP不支持聲明私有成員變數,所以不良代碼在PHP中也是允許的。繼承在PHP中很容易實現,只要使用extends關鍵字。 classAnotherextendsSomething{private$y;publicfunctionsetY($v){$this->y=$v;}functiongetY(){return$this->y;}}Another類的對象擁有了父類(Something)的全部的數據成員及方法,而且還加上了自己的數據成員和方法。
你可以使用 $obj2=newAnother;$obj2->setY(5);echo$obj2->getY();PHP只支持單繼承,所以你不能從兩個或兩個以上類派生出新的類來。你可以在派生類中重定義一個方法,如果我們在Another類中重定義了getX方法(方法重寫),我們就不能使 用Something中的getX方法了。如果你在派生類中聲明了一個與基派同名的數據成員,那麼當你處理它時, 它將「隱藏」基類的數據成員。
你可以在你的類中定義構造函數。構造函數是一個與類名同名的方法,當你創建一個類的對象時會被調用,例如: classSomething{private$x=null;//新版本的構造函數放棄使用類名,而統一使用__construct()publicfunction__construct($x){$this->x=$x;}publicfunctionsetX($v){$this->x=$v;}publicfunctiongetX(){return$this->x;}//析構函數publicfunction__destruct(){}}所以你可以創建一個對象,通過: $obj=newSomething(6);構造函數會自動地把6賦值給數據變數x。構造函數和方法都是普通的PHP函數(」__「兩個下劃線,魔術方法),所以你可以使用預設參數。 publicfunction__construct($x=3,$y=5){}接著: $obj=newSomething();//x=3andy=5$obj=newSomething(8);//x=8andy=5$obj=newSomething(8,9);//x=8andy=9預設參數使用C++的方式,所以你不能忽略Y的值,而給X一個預設參數,參數是從左到右賦值的,如果傳入的參數少於要求的參數時,其作的將使用預設參數。
當一個派生類的對象被創建時,只有它的構造函數被調用,父類的構造函數沒被調用,如果你想調用基類的構造函數,你必須要在派生類的構造函數中用parent::__construct()調用。可以這樣做是在派生類中所有父類的方法都是可用的。 classAnotherextendsSomething{publicfunction__construct(){parent::__construct(5,6);//顯示調用基類構造函數}}OOP的一個很好的機制是使用抽象類。抽象類是不能實例化,只能提供給派生類一個介面。設計者通常使用抽象類來強迫程序員從基類派生,這樣可以確保新的類包含一些期待的功能。在PHP中沒有標準的方法,但是:如果你需要這個特性,可以通過定義基類,並在它的構造函數後加上die 的調用,這樣就可以保證基類是不可實例化的,在每一個方法(介面)後面加上die 語句,所以,如果一個程序員在派生類中沒有覆蓋方法,將引發一個錯誤。而且因為PHP 是無類型的,你可能需要確認一個對象是來自於你的基類的派生類,那麼在基類中增加一個方法來實義類的身份(返回某種標識id),並且在你接收到一個對象參數時校驗這個值。當然,如果一個不好的邪惡程序員在派生類中覆蓋了這個方法,這種方法就不起作用了,不過一般問題多在懶惰的程序員身上,而不是邪惡的程序員。
當然,能夠讓基類對程序員無法看到是很好的,只要將介面列印出來做他們的工作就可以了。PHP 5 引入了析構函數的概念,這類似於其它面向對象的語言,如 C++。析構函數會在到某個對象的所有引用都被刪除或者當對象被顯式銷毀時執行。
重載(與覆蓋不同)在PHP中不支持,因為PHP是弱類型語言。在OOP中,你可以重載一個方法來實現兩個或重多的方法具有相同的名字,但是有不同數量或類型的參數(這要看語言)。PHP 是一種鬆散類型的語言,所以通過類型重載不起作用,然而通過參數的個數不同來重載也不起作用。
有時在OOP中重載構造函數非常好,這樣你可以通過不同的方法創建對象(變數函數)。在PHP中實現它的技巧是: classMyclass{publicfunctionMyclass(){$name=Myclass.func_num_args();//這個函數返回的是傳過來參數的個數$this->$name();//這里使用的是一個變數函數,以這個變數的值作為函數的名稱調用}publicfunctionMyclass1($x){//code}publicfunctionMyclass2($x,$y){//code}}通過在類中的額外的處理,使用這個類對用戶是透明的: $obj1=newMyclass('1');//將調用Myclass1$obj2=newMyclass('1','2');//將調用Myclass2有時這個非常好用。
多態
多態是對象的一種能力,它可以在運行時刻根據傳遞的對象參數,決定調用哪一個對象的方法。例如,如果你有一個figure的類,它定義了一個draw的方法。並且派生了circle和rectangle 類,在派生類中你覆蓋了draw方法,你可能還有一個函數,它希望使用一個參數x,並且可以調用$x->draw()。如果你有多態性,調用哪個draw方法就依賴於你傳遞給這個函數的對象類型。
多態性在象PHP這樣的解釋語言(想像一下一個C++編譯器生成這樣的代碼,你應該調用哪一個方法?你也不知道你擁有的對象是什麼類型的,好,這不是重點)是非常容易和自然的。所以PHP當然支持多態性。 classCalc{functionniceDrawing($x){//假設這是Board類的一個方法$x->draw();}}classCircle{publicfunctiondraw(){echo畫了一個圓;}}classRectangle{publicfunctiondraw(){echo畫了一個矩形;}}$board=newCalc;$obj=newCircle(3,187);$obj2=newRectangle(4,5);$board->niceDrawing($obj);//將調用Circle的draw方法$board->niceDrawing($obj2);//將調用Rectangle的draw方法用PHP進行面向對象編程
一些純化論者(purists)可能會說PHP不是一個真正的面向對象的語言,這是事實。PHP 是一個混合型語言,你可以使用OOP,也可以使用傳統的過程化編程。然而,對於大型項目,你可能想/需要在PHP 中使用純的OOP去聲明類,而且在你的項目只用對象和類。
隨著項目越來越大,使用OOP可能會有幫助,OOP代碼很容易維護,容易理解和重用。這些就是軟體工程的基礎。在基於web的項目中應用這些概念就成為將來網站成功的關鍵。
高級OOP技術
在看過基本的OOP概念後,我就可以向你展示更高級的技術:
序列化(Serializing)
PHP不支持永久對象,在OOP中永久對象是可以在多個應用的引用中保持狀態和功能的對象,這意味著擁有將對象保存到一個文件或資料庫中的能力,而且可以在以後裝入對象。這就是所謂的序列化機制。PHP 擁有序列化方法,它可以通過對象進行調用,序列化方法可以返回對象的字元串表示。然而,序列化只保存了對象的成員數據而不包括方法。
在PHP4中,如果你將對象序列化到字元串$s中,然後釋放對象,接著反序列化對象到$obj,你可以繼續使用對象的方法!我不建議這樣去做,因為(a)文檔中沒有保證這種行為在以後的版本中仍然可以使用。(b) 這個可能導致一種誤解,在你把一個序列化後的版本保存到磁碟並退出腳本時。當以後運行這個腳本時,你不能期待著在反序列化一個對象時,對象的方法也會在那裡,因為字元串表示根本就不包括方法。
總而言之,PHP 進行序列化對於保存對象的成員變數非常有用。(你也可以將相關數組和數組序列化到一個文件中)。
例子 : $obj=newClassfoo();$str=serialize($obj);//保存$str到磁碟上$obj2=unserialize($str);//幾個月以後//從磁碟中裝入str你恢復了成員數據,但是不包括方法(根據文檔所說)。這導致了只能通過類似於使用$obj2->x來存取成員變數(你沒有別的方法!)的唯一辦法,所以不要在家裡試它。
有一些辦法可以解決這個問題,我把它留著,因為對這篇簡潔的文章來說,他們太不好。我會很高興地歡迎在PHP的後續版本中有全序列化的特性。
使用類進行數據存儲PHP和OOP一件非常好的事情就是,你可以很容易地定義一個類來操作某件事情,並且無論何時你想用的時候都可以調用相應的類。假設你有一個HTML表單,用戶可以通過選擇產品ID號來選擇一個產品。在資料庫中有產品的信息,你想把產品顯示出來,顯示它的價格等等。你擁有不同類型的產品,並且同一個動作可能對不同的產品具有不同的意思。例如,顯示一個聲音可能意味著播放它,但是對於其它種類的產品可能意味著顯示一個存在資料庫中的圖片。你可以使用OOP或PHP來減少編碼並提高質量:
定義一個產品的類,定義它應該有的方法(例如:顯示),然後定義對每一種類型的產品的類,從產品類派後出來(SoundItem類,ViewableItem類,等等),覆蓋在產品類中的方法,使它們按你的想法動作。
根據資料庫中每一種產品的類型(type)欄位給類命名,一個典型的產品表可能有(id,type,price,description,等等欄位)...然後在處理腳本中,你可以從資料庫中取出type值,然後實例化一個名為type的對象: $obj=new$type();$obj->action();這是PHP的一個非常好的特性,你可以不用考慮對象的類型,調用$obj的顯示方法或其它的方法。使用這個技術,你不需要修改腳本去增加一個新類型的對象,只是增加一個處理它的類。
這個功能很強大,只要定義方法,而不去考慮所有對象的類型,在不同的類中按不同的方法實現它們,然後在主腳本中對任意對象使用它們,沒有if...else,也不需要兩個程序員,只有高興。
你同意編程是容易的,維護是便宜的,可重用是真的嗎?
如果你管理一組程序員,分配工作就是很簡單的了,每個人可能負責一個類型的對象和處理它的類。
可以通過這個技術實現國際化,根據用戶所選的語言欄位應用相應的類就可以了,等等。
拷貝和克隆
當你創建一個$obj的對象時,你可以通過$obj2=$obj來拷貝對象,新的對象是$obj的一個拷貝(不是一個引用),所以它具有$obj在當時的狀態。有時候,你不想這樣,你只是想生成一個象obj類一樣的一個新的對象,可以通過使用new語句來調用類的構造函數。在PHP中也可以通過序列化,和一個基類來實現,但所有的其它類都要從基類派生出來。
進入危險區域
當你序列化一個對象,你會得到某種格式的字元串,如果你感興趣,你可以調究它,其中,字元串中有類的名字(太好了!),你可以把它取出來,象: $herring=serialize($obj);$vec=explode(':',$herring);//以:為標識符把字元串拆分成一個數組$nam=str_replace(,'',$vec[2]);所以假設你創建了一個Universe的類,並且強制所有的類都必須從universe擴展,你可以在universe 中定義一個clone的方法,如下: classUniverse{//在新的PHP版本中克隆(__clone())是一個魔術方法,不要和這個方法搞混了functionclone(){$herring=serialize($this);$vec=explode(':',$herring);$nam=str_replace(,'',$vec[2]);$ret=new$nam;return$ret;}}//然後$obj=newSomething();//從Universe擴展$other=$obj->clone();你所得到的是一個新的Something類的對象,它同使用new方法,調用構造函數創建出的對象一樣。我不知道這個對你是否有用,但是Universe類可以知道派生類的名字是一個好的經驗。想像是唯一的限制。
模板引擎 Smarty:Smarty的特點是將模板編譯成PHP腳本,然後執行這些腳本。很快,非常方便。 Heyes Template Class:一個非常容易使用,但功能強大並且快速的模板引擎,它幫助你把頁面布局和設計從代碼中分離。 FastTemplate:一個簡單的變數插值模板類,它分析你的模板,把變數的值從HTML代碼中分離處理。 ShellPage:一個簡單易用的類,可以讓你的整個網站布局基於模板文件,修改模板就能改變整個站點。 STP Simple Template Parser:一個簡單、輕量級並且易於使用的模板分析類。它可以從多個模板中組裝一個頁面,把結果頁面輸出到瀏覽器或者文件系統。 OO Template Class:一個你可以用在自己程序中的面向對象的模板類。 SimpleTemplate:一個可以創建和結構化網站的模板引擎。它可以解析和編譯模板。 bTemplate:短小但是快速的模板類,允許你把PHP邏輯代碼從HTML修飾代碼中分離。 Savant:一個強大且輕量級的PEAR兼容模板系統。它是非編譯型的,使用PHP語言本身做為它的模板語言。 ETS - easy template system:可以使用完全相同數據重組模板的模板系統。 EasyTemplatePHP:適用於你的站點的一個簡單但是強大的模板系統。 vlibTemplate:一個快速、全能的模板系統,它包含一個緩存和調試類。 AvanTemplate:多位元組安全的模板引擎,佔用很少系統資源。它支持變數替換,內容塊可以設置顯示或隱藏 Grafx Software』s Fast Template:一個修改版本的Fast Template系統,它包括緩存功能,調試控制台以及沉默去除為賦值塊。 TemplatePower:一個快速、簡單、功能強大的模板類。主要功能有嵌套的動態塊支持,塊/文件包含支持以及顯示/隱藏未賦值的變數。 TagTemplate:這個庫的功能被設計來使用模板文件,同時允許你從HTML文件檢索信息。 htmltmpl: templating engine:一個適用於Python和PHP的模板引擎。它面向希望在項目中分離代碼和設計的web應用開發人員。 PHP Class for Parsing Dreamweaver templates:一個分析Dreamweaver模板的簡單類,被用於Gallery 2 和WordPress的自定義模塊中。 MiniTemplator (Template Engine):針對HTML文件的一個緊湊型模板引擎。對於模板變數和塊定義它具有簡單的語法。其中塊可以嵌套。 Layout Solution:簡化網站開發和維護。它擁有常用的變數和頁面元素使你不需要重復做頁面布局工作。 Cached Fast Template:它已經納入 FastTemplate ,允許你緩存模板文件,甚至可以在分離的塊內容上緩存不同的規格。 TinyButStrong:一個支持MySQL,Odbc,Sql-Server和ADODB的模板引擎。它包含7個方法和兩個屬性。 Brian Lozier』s php based template engine:只有2K大小,非常快並且是面向對象設計。 WACT:一個從設計中分離代碼的模板引擎。 PHPTAL:一個PHP下面的XML/XHTML模板庫。 Rong_View_Wudimei:Wudimei開發的國產框架Rong Framework的模板引擎,它類似於smarty,優點是速度快,缺點是模板標簽較少,不過夠用了。 框架介紹thinkphp
ThinkPHP是一個免費開源的,快速、簡單的面向對象的 輕量級PHP開發框架 ,創立於2006年初,遵循Apache2開源協議發布,是為了敏捷WEB應用開發和簡化企業應用開發而誕生的。ThinkPHP從誕生以來一直秉承簡潔實用的設計原則,在保持出色的性能和至簡的代碼的同時,也注重易用性。並且擁有眾多的原創功能和特性,在社區團隊的積極參與下,在易用性、擴展性和性能方面不斷優化和改進,已經成長為國內最領先和最具影響力的WEB應用開發框架,眾多的典型案例確保可以穩定用於商業以及門戶級的開發。
PHP認證級別
PHP課程由初級(IFE)、中級(IPE)和高級(IAE)三個部分。 IFE即Index Front-end Engineer的縮寫,指數前端工程師的意思。 IPE即 Index PHP Engineer 的縮寫,意思是指數PHP工程師。 IAE即 Index architecture/advanced engineer 的縮寫,意思是:指數高級/架構工程師。 PHP安全
PHP其實不過是Web伺服器的一個模塊功能,所以首先要保證Web伺服器的安全。當然Web伺服器要安全又必須是先保證系統安全,這樣就扯遠了,無窮無盡。常見的web安全漏洞有:注入攻擊,跨站攻擊,伺服器自身漏洞等,對應的詳細解釋,詳見:擴展閱讀中的《WEB安全性-2010_OWASP_TOP10》,這里有很詳盡的解釋。
PHP的優點學習過程和方法
PHP的語法類似於C,Perl,ASP或者JSP。對於那些對上述之一的語言較熟悉的人來說,PHP太簡單了。相反的,如果你對PHP了解較多,那麼你對於其他幾種語言的學習都很簡單了。你只需要很短的時間內將PHP的核心語言特點全部掌握,你可能已經非常了解HTML,甚至你已經知道怎樣用編輯設計軟體或者手工來製作好看的WEB站點。由於PHP代碼能夠無障礙的添加進你的站點,在你設計和維護站點的同時,你可以很輕松的加入PHP使得你的站點更加具有動態特性。
資料庫連接
PHP可以編譯成具有與許多資料庫相連接的函數。PHP與MySQL是絕佳的組合,如果再加上Apache伺服器,就是相當完美的了。你還可以自己編寫外圍的函數取間接存取資料庫。通過這樣的途徑當你更換使用的資料庫時,可以輕松的更改編碼以適應這樣的變化。PHPLIB就是最常用的可以提供一般事務需要的一系列基庫。
可擴展性
就像前面說的那樣,PHP已經進入了一個高速發展的時期。對於一個非程序員來說為PHP擴展附加功能可能會比較難,但是對於一個PHP程序員來說並不困難。
PHP可伸縮性
傳統上網頁的交互作用是通過CGI來實現的。CGI程序的伸縮性不很理想,因為它為每一個正在運行的CGI程序開一個獨立進程。解決方法就是將經常用來編寫CGI程序的語言的解釋器編譯進你的web伺服器(比如mod_perl,JSP)。PHP就可以以這種方式安裝,雖然很少有人願意這樣以CGI方式安裝它。內嵌的PHP可以具有更高的可伸縮性。
PHP免費安裝
PHP源代碼包安裝版:這個版本適合已經有自己獨立的網站域名、網站空間的專業網站建設用戶。使用方法依然其為簡單,只需三步:
第一、到官方網站:下載 PHP源代碼包安裝版最新版本,解壓下載文件,將其中的全部內容上傳到你的支持PHP的網站空間
第二、改更文件屬性,請將根目錄下以PHP為後綴名的文件和」/include/domain.php」和 「/attachments」 和 「/data」文件夾以及文件夾下所有的文件屬性改成「可讀」、「可寫」、「可執行」,通常是「755」。
第三、打開你的網站根目錄,系統會自動運行setup安裝程序,按提示點下一步操作即可。
友情提示:當你下載我們的軟體並看到這份說明時,則說明你一定是對企業網站建設有一定的需求或者你是一個網站建設技術學習者。
文件格式 對於只含有 php 代碼的文件,我們將在文件結尾處忽略掉 ?>。這是為了防止多餘的空格或者其它字元影響到代碼。 例如:
$foo = 'foo'; 縮進應該能夠反映出代碼的邏輯結果,盡量使用四個空格,禁止使用製表符TAB,因為這樣能夠保證有跨客戶端編程器軟體的靈活性。 例如: if(1==$x){$indented_code=1;if(1==$new_line){$more_indented_code=1;}}變數賦值建議保持相等間距和排列。 例如: $variable='demo';$var='demo2';每行代碼長度應控制在80個字元以內,最長不超過120個字元。因為 linux 讀入文件一般以80列為單位,就是說如果一行代碼超過80個字元,那麼系統將為此付出額外操作指令。這個雖然看起來是小問題,但是對於追求完美的程序員來說也是值得注意並遵守的規范。 每行結尾不允許有多餘的空格。 Php文件記事本編輯亂碼問題
一般情況下,記事本編輯器在對文件進行完編輯並保存之時,其默認編碼為ANSI,中文。然則更多的時候,php在語言環境設置時語言多數為utf-8,直接保存並用於apache等http-server解析後就會出現亂碼。
為此,應該注意在用記事本編輯完後可將文件用「另存為」的方式對文件進行保存,並將「文件類型」選擇「所有文件」,編碼與文件指定語言編碼一致即可。
算數運算符
PHP 的運算符包括算術運算符、賦值運算符、比較運算符和邏輯運算符。
算數運算符:
加,減,乘,除,取模(取余)+、-、*、/、%
賦值運算符:(以下解釋在許多書中有所不同)
賦值,加賦值,減賦值、乘賦值、除賦值,連字賦值
=、+=、-=、*=、/=、.=
位運算符:
位與、位或、位亦或、位非、左移、右移
&、|、^、~、<<、>>
比較運算符:
等於、全等於、不等於、不全等於、大於、小於、大於等於、小於等於
==、===、!=(<>)、!==、>、<、>=、<=
邏輯運算符:
邏輯與、邏輯或、邏輯非、邏輯亦或
&&、||、!、xor
字元串運算符:
. 連接兩個字元串
2. 後綴為PHP的文件如何打開
*.php是一種網路開發的程序,它在伺服器端運行,也就是你如果想打開此文件(以網頁的形式),必須為他配一台伺服器或者安裝一個基於本機的服務性質的軟體!
*.php是一種網路開發的程序,它在伺服器端運行,也就是你如果想打開此文件(以網頁的形式),必須為他配一台伺服器或者安裝一個基於本機的服務性質的軟體,不過你可以使用寫字板之內的東西打開他,此時你看到的是源程序,如果是在網上下載的php的話,他已經在伺服器端運行,你只能看到結果!即我們常見的超文本html。
後綴名大全
A:
1 .ace: ace.exe或winace生成的壓縮文件
2 .ain: ain是一種壓縮文件格式,解開ain需要用ain.exe。在網上可以找到。
可以在各大的FTP pub/msdos utility之類地方尋找ain.exe
3 .arj,a01,a02...:
arj是一種非常常見的壓縮文件格式,它可以支持帶目錄,多文件壓縮,
一般FTP中DOSutility目錄下都可以找到arj.exe,一般的版本有2.4
2,2.382.50等,其文件格式是通用的,不存在格式不認問題。
a01,a02,a03是arj在多文件壓縮時後面文件的預設文件名。
展開arj文件可以用arj x -va -y filename.arj
在windows下可以試試用winzip展開。
4 .asp:
.asp文件通常指的是Active Server Pages文件,這個文本文件可以
包括下列部分的任意組合:文本/HTML 標記/ASP 腳本命令,可以用
ie瀏覽器直接打開,也可以用記事本打開編輯。
.asp文件也可能是一種文檔格式的文件,可以用cajviewer打開。
5 .avi:
一般用windows自帶的媒體播放器就可以播放。
如果沒有圖象只有聲音,則可能是mpeg4格式,需要裝插件。
如果有單獨的字幕文件,則可以用其它播放器。
B:
1 .BHX(BINHEX):
BinHex是蘋果機器的一種編碼方式.
WinZip可以解碼. 將email以文本方式存檔,擴展名為.BHX,
就可以直接用WinZip解壓了.
2. .bin
光碟映象文件,可以:
a.用Bin2ISO將bin轉成ISO文件,然後用WinImage解開.
注意:有些BIN文件實際上就是ISO文件如果上面的辦法有問題
可以直接將後綴改成iso,然後用WinImage解解看
b.用ISOBuster直接解BIN.
c.用daemon直接將BIN文件虛擬成光碟機
C:
1 .caj: cajviewer,CAJ文件瀏覽器是中國學術期刊(光碟版)電子雜志社(CAJEJPH)
的產品。它是為中國期刊網(www.chinajournal.net.cn)的全文檢索,瀏覽開發的。
2 .cdi: 光碟映像文件,用DISKJuggle 就可以打開
3 .cdr: CorelDraw
4 .cdp: Nti CdMaker做的光碟Image.用 Nti CdMaker 的FileCopy刻.
5 .cfm:
www瀏覽器(伺服器支持,類似asp,php,jsp) or 文本編輯器看源碼
6 .chi:chm(html help)的索引,和chm文件一起使用
7 .chm:
基於Html文件格式的幫助文檔,在IE4.0以上可以雙擊直接打開。
製作工具可以採用Html Help WorkShop。
8 .cif:是easy cd creator地image文件
9 .cpj:
WinONCD的工程文件,不過如果那個Raw文件是2072位元組的扇區的話就是標準的ISO文件
換個擴展名,用什麼刻錄軟體都可以,最差用WinImage直接展開安裝也行。
10 .cpx: cpx是一種壓縮過的矢量圖格式,CorelDraw
D:
1 .dat:
一般指數據文件,比如某些音碟或者某些應用程序的數據。
是個很通用的擴展名(比如影碟,一般數據,......),無法判斷用那個程序打開,
除非有更多信息,比如這些文件是做什麼用的。
是某個軟體附帶的,還是獨立存在的,等等。
2 .dbf:
DOS下:
foxbase
foxpro
DN 中F3(view)
Windows:
qview(快速查看)
FoxPro
Office中Excel等.
3 .ddi: DISKDUPE,unimg,unddi,undisk
4 .dvi: Latex處理過的文件,用任何一種Latex軟體都可看它。
5 .dxf: AutoCad,3DMax
6 .dxr: Macromedia Director Protected Movie File
E:
1 .ecw: 有可能是ENSONIQ AudioPCI音效卡的波表樣本
2 .emf: 擴展的wmf文件
3 .eml: outlook express
4 .eps:
eps是一種特殊的ps文件, 通常是嵌入其他文檔中使用. 製作這種文件非常簡單:
a) 在Windows中安裝一台PostScript列印機(並不是真的要買一台, 僅僅是安裝驅動
程序), 例如 HP LaserJet 5P/5MP PostScript, 設置其屬性中的PostScript輸出格式為
內嵌的PostScript, 列印埠設為FILE(在磁碟上創建文件);
b) 在任何繪圖軟體中編輯好圖形後, 在列印對話框中將列印機設為那個PostScript
列印機, 然後列印到文件, 文件名可取為xxx.eps, 這將是你所需要的eps文件.
很多常用軟體,比如ACDSee、Word等都可打開eps文件。
F:
1 .fcd:用vitrul CD-ROM打開
2 .fla: Flash
G:
1 gerber file(.dat .rep .pho 文件): 電路圖可以送去制板的
2 .gif: gif是一種很普遍的圖像格式,用幾乎所有的圖像處理軟體都可以處理gif。
3 .gtp:guitar pro
.gtp是2.2以下版本的,3.0版本的是.gp3
H:
1 .hlp: 編輯可用help magic,help scribe
2 .hqx:
hqx格式就是所謂的Binhex 4.0文件。
實際是Ascii文件。
在PC上可以用winzip 6.2以上解開。
在Mac機上,如果你用Fetch 2.0以上來傳
(在隨機的Apple Internet Connect Kit上已帶)
可以自動轉成原來的Binary文件。
一般來說,你down了hqx格式的文件在PC上是派不上
什麼用場的,當然你可以用來和別人交換word文件什麼的。
I:
1 .icl:Icon Library,用AxIcons打開,一個專用的畫圖標的軟體。
2 .ic圖標文件,可以用acdsee轉成bmp文件。
3 .idx:cterm非常下載下來的文件索引,用cterm自帶的indexread打開
4 .iges:iges是一個基於NURBS的文件格式, 可以用AutoCad打開,如果不行,可以可以先拿到rhino中轉成DXF
5 .img:
img是軟盤image文件,一個img就是一個軟盤,尼需要一個工具將這樣
的文件展開還原到軟盤上,就是hd-,
6 .is
一般是光碟鏡像,直接用來刻盤或者用winimage解開
也可以裝一個虛擬光碟軟體daemon直接將之虛擬成光碟。
J:
1、.jpg,.jpeg:
.jpg是一種高壓縮比的真彩圖像文件格式,一般的圖像處理軟體都可以
顯示jpg圖像。推薦使用的看jpg程序有:在DOS下sea,在windows下用
acdsee,在UNIX下可以用xv來看jpg。
K:
1、.kc:
可以用king打開。
L:
1 .lwp: Lotus WordPro 格式
2 .lrc: 一個winamp插件的歌詞文件,可以在放mp3時顯示歌詞。以前叫lrics mate
3 .lzh:
lzh是很老的一種壓縮文件格式,近幾年已經很少用了,展開lzh
文件需要lha.exe,在FTP的DOS utility目錄下應該有。
好象以前有一種自解壓然後運行的exe是用lha壓的,lzh用winrar就能解
4 .ldb
Access資料庫鎖定文件,紀錄資料庫的鎖定信息,
比如是否被打開,是否以獨占形式訪問等等。
M:1 .max: 3DMax文件。
2 .mdb: Microsoft Access資料庫文件
3 .mdl: Rose文件
4 .mif:一種是MaxPlusII的文件
5 .mov:電影文件,用Quicktime打開。
6 .mpp:Project File(Ms Project)
7 .msf:
part 1:文件頭,我見到的幾個都是mstor打頭的,文件頭包括版本信息、注冊表
的一些鍵值、圖片的位置信息等等,關系不是很大,不必仔細研究。
part 2: 圖片序列,圖片都是jpeg格式的,每張圖片的頭可以通過查找"JFIF"字元串查到,查到後一定要後退六個位元組,才是真正的jpeg文件頭。也就是說
jpeg文件的第七到第十個位元組是"JFIF"。每兩張圖片之間會有大量的位元組
填充0,中間你會找到屏保運行時產生的臨時文件的名字,如c:\\1.jpg;
由於jpg文件不校驗位元組和長度的,你可以隨便取到臨時文件名上面的哪個
0 上。把之間的部分拷貝出來另存為.jpg文件就可以了,
part 3:圖片都取出來了,還管它干什麼,呵呵
7 .msi:
MS Windows的新的安裝文件標准。已經在Office2000和Windows2000中採用。
98或NT下,可以裝下面的軟體:InstMsi9x.exe,InstMsiNT.exe
N:
1 .nb:Mathematica的一種文件格式把。
2 .nf
察看方法:
1.文本編輯器都可以看。建議將自動換行設為80列。
專門的查看軟體:
NFOShow1.1是網友寫的,實際效果是我見過最好的,不過有時時會出錯退出。DAMN.NFO.Viewer.v2.0隻有幾十k,很好用,足夠了。還可以在dos窗口下type xx.nfo
3 .ngp,.ngc:
是模擬器游戲的文件neopocott 0.35b(ngp模擬器)ngp模擬器neopocott升級到
了v0.35b版本,可在win9x, 2k, me平台上運行。新版本暫停功能得到修改,支持
了ngc的擴展名文件,可以更好的存儲和讀取文件,增加了對鍵盤的設置等等
4 .njx: 南極星的字處理軟體的文檔格式
5 .nrg:Nero做的CD Image,用nero直接打開刻盤即可
1 .opx: Microsoft 組織結構圖,用office自帶的組件可以打開,
默認不安裝,需要添加程序。
P:
1 .pdf:
pdf是adobe公司開發的一種類似於poscript的文件格式。可以用
adobe的acrobat,arcrbat reader來編輯,打開pdf文件
2 .pdg:超星閱讀器SSreader3.52以上版本
3 .phtml:cajviewer
4 .pl: 一般說來是PERL Script,也可能是mp3播放軟體的playlist文件
5 .ppt .pps:PowerPoint
6、prn:
prn文件是列印機文件,比如你在Word中選擇"列印到文件"就會生成這種文件。
你可以把擴展名改為ps,然後用GSView打開。
或者用PrFile這個軟體直接把prn文件送到PS列印機列印出來。
7 .ps:
ps的意思是PostScript,這是一種頁面描述語言,主要用於高質量列印。
在UNIX和windows下都可以用GhostView來看ps文件。其homepage是
http://www.cs.wisc.e/~ghost/gsview/new23.html
如果你有PoscriptScript支持的列印機,可以直接列印PS文件。
如果你想製做PS文件,簡單的辦法是:在Windows下安裝一個支持Post Script
的列印機驅動程序,比如HP 4 PS,你不需用非有這個列印機安裝在你的機器上。安裝好
驅動之後,在WIndows下任何一個編輯器中編輯好你需要轉成PS的文件,比如從
Word下。然後選擇"列印",選擇那個PS兼容的驅動程序,然後選擇"print to file",
它將把列印輸出送到一個文件中去。因為你用了一個Poscript 的列印驅動程序,
那麼這個列印文件就是PostScript文件了。將該文件改名字為XXX.ps就可以了。
8 .ps.gz:
gzipped postsript 文件,可以用gsview直接打開,其支持gzip
如果是用IE下載的,有可能實際已經解開,可以去掉gz後綴試試。
9 .psz: 改成*.ps.gz試試,然後用gzip或者winzip解開就是.ps文件了
10 .psf: outline PostScript printer font (ChiWriter)
11 .ptl: AUTOCAD做出來的列印文件
Q:
R:
1、.rar,.r01,r02......:
rar是一種壓縮文件格式,在DOS下解開RAR可以用rar.exe,在各大FTP
裡面都可以找到,一般在pub/msdosutility之類地方。需要注意的是rar
高版本壓縮的文件低版本不認。當前最新的rar for DOS是2.X版,如果
能找到2.x版的話最好不要用1.X板的rar,2版的rar文件相互是通用的。
rar的命令行參數幾乎和arj一樣,rar x -v -y filename.rar
可以展開文件,包括帶目錄和多文件壓縮。
rar多文件壓縮時rar之後的文件名是r00,r01,r02....
DOS下的軟體不支持長文件名,所以如果你的rar裡面有長文件名並且因為
在DOS下展開丟失了得話,可以試試winrar for win95,支持長文件名。
在各大ftp上應該也可以找到。其所有版本都可以認rar2.X得文件。
2、.raw:
是easy cd或者winoncd等軟體做的CDROM的ISO鏡像
RAW屬於MODE1的
3、.raw:
可用Photoshop看。
4、.rom:
是很小的音樂壓縮格式,使用realplayer可以播放。
5、.rom:
是模擬器的文件吧。
6、.rpm:
RPM 是Redhat Package Manager 的簡寫。
是Linux 底下的軟體包管理系統。
到Linux 底下用使用rpm 來對它進行操作。
7、.rm:
RM文件是一個包含了RA文件URL地址的文件,作用就同M3L與MP3一樣,用於
REALPLAYER在INTERNET上播放RA流。
8、.rmx:
可以用realplayer 打開。
9、.rtf:
rich text format
包含格式的文本,可用於各種編輯器間交換文件,但是體積要比專用格式大很多。 可以用word,寫字板打開,一般的支持格式的編輯器都能打開。
S:
1、.sfe:file split 分割文件。
用file split 可以把他們合並成原來的zip文件。
或許還有自動合並得bat文件呢。
2、.sfv:
不是文件分割器產生的,是sfv32w產生的,一般用來做windows下的文件校驗。
3、.shar:
Shell Archive, 文本格式的打包文件,類似tar, 不過tar生成的為binary file,在UNIX下sh < *.shar 即可解包, 或用專門的 shar/unshar utilities。
4、.shg:
是microsoft的help workshop的圖形處理工具生成的圖形文件,
是用來在help中調用的。
5、.sit:
Macintosh Stuffit archives,
as well as UUE (uuencoded), HQX (BinHex), bin (MacBinary), ZIP, ARC,
ARJ, and GZ archives
use "Aladdin Expander" to expand
6、.srm:
呵呵,當然是用Kiven電子書庫了.你可以去化雲坊down 3.0.12的版本,也可以去http://kiven.yeah.net kiven的主頁上當最新版.還有源碼的呦.
7、.stx:
Syntax file of Edit Plus
8、:
是Flash的動畫格式,如果瀏覽器裝了插件,可以用瀏覽器打開,但最好用
Flash Player Browser打開。
9、.swp:
Scientific Word Place
10、.spw
SigmaPlot Worksheet
http://www.spssscience.com/sigmaplot
T:
1、.tar.GZ or .tar:
.tar.gz,或者.tgz的文件一般是在UNIX下用tar和gunzip壓縮的文件。
可能的文件名還有.tar.GZ等。gunzip是一種比pkzip壓縮比高的壓縮 程序,一般UNIX下都有。tar是一個多文件目錄打包器,一般也是在unix下。
在UNIX下展開.tar.gz文件用tar zxvf filename.tar.gz就可以了 或者用gunzip -d filename.tar.gz得到filename.tar 然後用tar xvf filename.tar解包,兩步完成。
在PC環境下解tgz,可以用winzip 6.2以上版本,可以直接打開extract。
建議在win95或者NT下使用winzip,因為很多這樣的文件都是在UNIX下壓縮的,
很可能有長文件名,但是WIndows3.1是不支持長文件名的,however,win31下的winzip 也是應當可以展開tgz的。
2、.tar.Z:
.Z的文件一般是在UNIX下用compress命令壓縮的。在UNIX下解開可以用 uncompress filename.Z。在PC下可以用winzip6.2以上版本,建議使用
win95版本的winzip,因為win31不支持長文件名,而UNIX下的文件很
可能是長文件名。但win31下winzip應該也可以解開。
如果是.tar.Z的文件的話可以用uncompress先解開外面一層,然後用
tar xvf filename.tar解開tar文件。在PC下還是用winzip。
3、.tex:
.tex本身是個文本文件,必須經過編譯成dvi文件,使用winLatex就可以,如果你有 unix當然會帶TeX或LaTex的。
U:
1、.ufo:
問:這種文件要用什麼程序打開?quick view plus 可以嗎?
答1:使用photoimpact應該可以.
答2:通常是漫畫,可以用冷雨瀏覽來看.
答3:找ufo2jpg.exe可以將ufo文件變成熟悉的JPG
2、.uu,.uue:
.uu是uucode的文件。uucode是一種把8bit文件轉成7bit的演算法。
我們知道,exe文件或者其他二進制文件是不可以直接用email
發出去的。uucode可以把這些文件轉成7bit格式,就是普通文本文件格式
(如下面的樣子),然後就可以被接收方還原。
begin 640 pass
M("$Y-2V]R<5!1=UI!.C`Z,#I3=7!E`@<F]O=#IB>$Y-2V]R<5!1=UI!.C`Z,#I3=7!E<BU5<V5R.B\\Z+V)I;B]C
M<V@@<WES861M.BHZ,#HP.E-Y<W1E;2!6"B`@(&=U97-T.F-U-&I)=&M%9&HN
M:S(Z.3DX.CDY.#I\'=65S="!!8V-O=6YT.B]U<W(O<&5O<&QE+V=U97-T.B]B
如果你收到一個email是uucode做的,可以把它存成一個文件,將begin 640..
之前的部分刪除,然後改文件名為.uu,然後用uudecode解開。
在windows下可以用winzip6.2以上版本。
V:
1、.vcd:
一般是virtual driver的虛擬光碟機文件
也可以轉換成iso,用daemon打開,參見格式轉換,.vcd->.iso
另外金山影霸的文件也可能是vcd。
2、.vcf:
是地址本文件,用outlook express可以打開,(雙擊就可以)。
3、.vob:
DVD數據文件
4、.vos:
VOS 是一款強大的電子琴模擬軟體,.vos文件可以用它打開。
5、.vqf:
用Winamp播放,需要裝相應的插件。
備註:VQF是YAMAHA公司和日本NTT公司聯合開發的一種新音樂格式,它的壓縮比比MP3更高,音質卻與MP3不相上下,而它之所以沒有MP3那般出盡風頭,大概與其推出時間較遲以及缺和相應的廣告宣傳有關吧,加之其播放、製作工具目前還不是很豐富,所以知道的人不是很多。但不管怎麼說,VQF的確是一種優秀的音樂壓縮格式。常見播放工具有Yamaha VQ Player等等。
6、.vsd:
visio畫的流程圖
7、.vss:
visio template file
W:1、.wdl:
Dynadoc,華康文件閱讀器 可用dynadoc 或 FPread32.exe為關鍵字在ftp搜索引擎搜索。
2、.wmf:
WINDOWS的圖元文件,用ACDSEE可以看,WORD也可以打開。
3、.wpd:
WPD是corel公司的wordperfect字處理軟體的文檔的擴展名。
4、.wsz:
winamp的skin,down下來以後是wsz格式ws打開一個winzip先,然後用winzip里的open。。。。。。。
X:
1、.xls:
MicroSoft Excel的文件。
2、.xml:
eXtensible Markup Language
SGML的一個子集, 1998年2月正式發布1.0版
目前IE5.0可支持,可以在IE5.0下瀏覽.xml文件,但同時必須有相應的.xsl文件
才能正常顯示。
Y:
......
Z:
1、.zip:
zip是一種最常見的壓縮格式,在UNIX下解開zip用unzip命令。
在PC下解開zip可以用pkunzip.exe,一般在大ftp裡面都可以找到,
或者用winzip解開。pkunzip -d filename.zip可以帶目錄結構解開文件
3. php還流行嗎(php越來越少人用)
現在php的應用面和web相比還廣嗎?PHP已步入老年期了,無葯可救。
好幾年前網上就在討論PHP是否已死的問題。
雖不能說PHP已死,但PHP確實「大勢已去」。近兩三年越來越多的PHP開發者轉向java、Golang、.NETCore開發。
圈裡還有這樣的聲音:世界上有多少大網站大公司在使用PHP。這是在鼓吹和浸淫在PHP的幻想里而已。看看近幾年的DevOps、Serviceless、K8s、Flutter和大前端、Dubbo和微服務等等,越來越多的新技術、熱門和趨勢,沒和一個能和PHP占邊的,事實已經證明PHP已經被邊緣化了。
如果你留意招聘網站,PHP的開發崗位在減少,PHP開發的崗位大概在兩類:
1、後台或OA開發;
2、開源電商網站維護或二次開發。
如此之外,還有別的選擇嗎?
PHP在網站開發上還有前途嗎?
引用PHP(HgpertextPreprocessor或PersonalHomePageTools)的官方站點p
PHP是一種免費軟體,它能運行在包括Windows、Linux等在內的絕大多數操作系統環境中,常與免費Web服務軟體Apache和免費資料庫Mysql配合使用於Linux平台上,具有最高的性能價格比,號稱「黃金組合」。
也許PHP最強大和最重要的特徵是它的資料庫支持,目前其支持范圍覆蓋了包括Oracle、Sybase、MySQL、ODBC等在內的大多數常見資料庫。使用它編寫一個含有資料庫功能的網頁程序變得十分簡單。
特別是現在中國的web2.0熱潮讓PHP又重現輝煌.
PHP語言的特點:
◎快速:PHP是一種強大的CGI腳本語言,語法混合了C、Java、Perl和PHP式的新語法,執行網頁比CGI、Perl和ASP更快,這是它的第一個突出的特點。
◎具有很好的開放性和可擴展性:PHP屬於自由軟體,其源代碼完全公開,任何程序員為PHP擴展附加功能非常容易。
◎資料庫支持:PHP支持多種主流與非主流的資料庫,如:、AdabasD、DBA、dBase、dbm、filePro、Informix、InterBase、mSQL、MySQL、MicrosoftSQLServer、Solid、Sybase、ODBC、oracle、oracle8、PostgreSQL等。其中,PHP與MySQL是現在絕佳的組合,它們的組合可以跨平台運行。
◎面向對象編程:PHP提供了類和對象。為了實現面向對象編程,PHP4及更高版本提供了新的功能和特性,包括對象重載、引用技術等。
◎版本更新速度快:與數年才更新一次的ASP相比,PHP的更新速度就要快得多,因為PHP每幾周就更新一次。
◎具有豐富的功能:從對象式的設計、結構化的特性、資料庫的處理、網路介面應用、安全編碼機制等,PHP幾乎涵蓋了所有網站的一切功能。
◎可伸縮性:傳統上網頁的交互作用是通過CGI來實現的。CGI程序的伸縮性不很理想,因為它為每一個正在運行的CGI程序開一個獨立進程。解決方法就是將經常用來編寫CGI程序的語言的解釋器編譯進你的web伺服器(比如mod_perl,JSP)。PHP就可以以這種方式安裝,雖然很少有人願意這樣以CGI方式安裝它。內嵌的PHP可以具有更高的可伸縮性。
PHP語言的優勢
◎良好的安全性:PHP是開源軟體,所有PHP的源代碼每個人都可以看得到,代碼在許多工程師手中進行了檢測,同時它與Apache編繹在一起的方式也可以讓它具有靈活的安全設定,PHP具有了公認的安全性能。
◎跨平台特性:ASP比不上PHP的跨平台能力,PHP幾乎支持所有的操作系統平台及資料庫系統,正是它的這種能力讓UNIX/Linux有了一種與ASP媲美的開發語言,並廣為流行。
◎易學性:PHP嵌入在HTML語言中,且堅持腳本語言為主,與Java、C等語言不同,語法簡單、書寫容易,方便學習掌握。現在市面上也有了大量的書,同時Internet上也有大量的代碼可以共享
◎執行速度快:佔用系統資源少,代碼執行速度快。
◎免費:在流行的企業應用LAMP平台中,PHP、Linux、Apache、MySQL都是免費軟體,降低了企業架設成本。
所以可以告訴你,PHP在網站開發上的前途一片光明.你可以看看網路的搜索器,你現在用的知道貼吧等等大部分是用PHP作的.
在這個互聯網蓬勃發展的新時期里,PHP技術和相關的人才,滿足了最新的互動式網路開發的應用。目前,國內包括Google、網路、網易、新浪、搜狐、阿里巴巴、奇虎、eBay、騰訊、Yahoo、金山等的各大網站都在尋求PHP高手。PHP的人才缺口是40:1。另一方面,我國對搜索引擎技術人才的需求每年至少在40萬人,目前國內的搜索技術人才不到1萬人,供需比達到1:40。2006年,Google、Bai等國際大的搜索引擎公司在校園招聘搜索引擎工程師3000人,年薪20萬元以上的金領職位卻找不到合適的人。
php未來怎麼樣?您是否擔心自己的PHP程序員生涯?或者仍然困惑,PHP是否是更好的語言來啟動你的編程生涯。在本文中,我們將通過討論PHP的空間和未來,來解決您的問題和困惑。
PHP真的不行了嗎?
很多人建議說PHP在未來5年已經沒有發展空間了。大公司更傾向於使用Java,.Net,Python,C,C++等語言來構建web應用。
我們必須記住這一點:任何編程語言都不能完全按照程序員的期望去做,每個語言都有自己的優點和缺點。
為了和其他語言做比較,我們對PHP的優缺點進行了分類,最後得出了我們的結論。
PHP的缺點
PHP不原生支持多線程,因為它是服務端的腳本語言,會由web伺服器替代解決多線程的問題。
PHP是弱類型語言,有可能存在安全隱患。
PHP還有其他安全隱患,例如:SQL注入,Session攻擊,代碼泄露等。
PHP社區延遲發布其新版本。
大多數開發人員說,PHP不是一種好的選擇,因為高級和復雜Web應用程序的編程語言具有安全特性,且具有復雜的文件結構和目錄管理系統。
PHP的優點
PHP是最流行的開源編程語言,有更豐富的工具可供開發,且成本更低。這就是為什麼PHP在網路自由職業者中流行的原因。
PHP的最新版本PHP7推出更多的增強功能和更高的性能。
提供最強的和最易用的CMS像WordPress,Drupal,Magento,OpenCart,Joomla等,可以幫助用戶很快建立一個網站。
PHP框架如CodeIgniter、Laravel等,強製程序員使用MVC(模型-視圖-控制器)設計模式創建Web應用程序。這是個好習慣。
網路上PHP的內容更多,支持的網站也更多。
PHP語法很容易學。
PHP7相比PHP5.6性能提升很多。
4. android 如何實現音樂播放
在Android平台下,要實現聲音的播放是十分容易實現的,只要生成一個MediaPlayer對象,並調用它的相關方法,就能改變對聲音播放進行控制。MediaPlayer對象有一下各種狀態:
熟悉了MediaPlayer對象的各種狀態後以及轉換條件,就能很好的控制媒體播放。
例如:播放res/raw文件夾中的歌曲十分簡單,只需寫如下代碼:
MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1);
mp.start();
也可以指定音樂文件的位置來進行播放,例如,在sdcard根目錄下有有一首歌曲:test.mp3。則可以這樣播放:
MediaPlayer mp = new MediaPlayer();
String song = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "test.mp3";
try {
mp.setDataSource(song);
mp.prepare();
mp.start();
} catch (Exception e) {
e.printStackTrace();
}
建議在播放音樂的時候把MediaPlayer放在Service中,因為如果放在Activity中會使得界面特別卡。而且音樂不能放到後台里播放,一旦退出Activity,音樂就會暫停播放。
可以在Activity中布局相關的界面,例如按鈕等。然後通過這個Activitiy來啟動這個Service。要通過UI與Service交互,可以通過Intent對象傳遞消息。更復雜一些,要實現Service向Activity發送消息,並利用這些消息來更新UI,這可以用廣播機制,例如告訴Activity是否正在播放,播放進度,當前播放歌曲條目等信息。
例如以下實例代碼:
/*Activity中*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnPlay = (Button)findViewById(R.id.btnPlay);
btnPause = (Button)findViewById(R.id.btnPause);
btnPlay.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,SoundService.class);
intent.putExtra("playing", true);
startService(intent);
}
});
btnPause.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,SoundService.class);
intent.putExtra("playing", false);
startService(intent);
}
});
}
}
播放音樂的Service代碼:
package com.yzy.sound;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
public class SoundService extends Service {
private MediaPlayer mp;
@Override
public void onCreate() {
super.onCreate();
mp = MediaPlayer.create(this, R.raw.test);
}
@Override
public void onDestroy() {
super.onDestroy();
mp.release();
stopSelf();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
boolean playing = intent.getBooleanExtra("playing", false);
if (playing) {
mp.start();
} else {
mp.pause();
}
return super.onStartCommand(intent, flags, startId);
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
5. PHP是什麽(我想要詳細一點的答案)
PHP,一個嵌套的縮寫名稱,是英文超級文本預處理語言(PHP:Hypertext Preprocessor)的縮寫。PHP 是一種 HTML 內嵌式的語言,PHP與微軟的ASP頗有幾分相似,都是一種在伺服器端執行的嵌入HTML文檔的腳本語言,語言的風格有類似於C語言,現在被很多的網站編程人員廣泛的運用。PHP 獨特的語法混合了 C、Java、Perl 以及 PHP 自創新的語法。它可以比 CGI 或者 Perl 更快速的執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;與同樣是嵌入HTML文檔的腳本語言JavaScript相比,PHP在伺服器端執行,充分利用了伺服器的性能;PHP執行引擎還會將用戶經常訪問的PHP程序駐留在內存中,其他用戶再一次訪問這個程序時就不需要重新編譯程序了,只要直接執行內存中的代碼就可以了,這也是PHP高效率的體現之一。PHP具有非常強大的功能,所有的CGI或者JavaScript的功能PHP都能實現,而且支持幾乎所有流行的資料庫以及操作系統。
PHP 最初是1994年Rasmus Lerdorf創建的,剛剛開始只是一個簡單的用Perl語言編寫的程序,用來統計他自己網站的訪問者。後來又用C語言重新編寫,包括可以訪問資料庫。在1995年以Personal Home Page Tools (PHP Tools) 開始對外發表第一個版本,Lerdorf寫了一些介紹此程序的文檔,並且發布了PHP1.0。在這早期的版本中,提供了訪客留言本、訪客計數器等簡單的功能。以後越來越多的網站使用了PHP,並且強烈要且增加一些特性,比如循環語句和數組變數等等,在新的成員加入開發行列之後,在1995年中,PHP2.0發布了。第二版定名為PHP/FI(Form Interpreter)。PHP/FI加入了對mSQL的支持,從此建立了PHP在動態網頁開發上的地位。到了1996年底,有15000個網站使用 PHP/FI;時間到了1997年中,使用PHP/FI的網站數字超過五萬個。而在1997年中,開始了第三版的開發計劃,開發小組加入了 Zeev Suraski 及 Andi Gutmans,而第三版就定名為PHP3。2000年,PHP4.0又問世了,其中增加了許多新的 性。
PHP的特性包括:
開放的源代碼:所有的PHP源代碼事實上都可以得到。
PHP是免費的。
基於伺服器端:由於PHP是運行在伺服器端的腳本,可以運行在UNIX、LINUX、WINDOWS下。
嵌入HTML:因為PHP可以嵌入HTML語言,所以學習起來並不困難。
簡單的語言:PHP堅持腳本語言為主,與Java以C++不同。
效率高:PHP消耗相當少的系統資源。
圖像處理:用PHP動態創建圖像
PHP 3與PHP 4的比較
PHP3跟Apache伺服器緊密結合的特性;加上它不斷的更新及加入新的功能;而且幾乎支持所有主流與非主流資料庫;再以它能高速的執行效率,使得PHP在1999年中的使用站點已經超過了150000萬。加上它的源代碼完全公開,在 Open Source意識抬頭的今天,它更是這方面的中流砥柱。不斷地有新的函數庫加入,以及不停地更新的活力,使得PHP無論在UNIX、LINUX或是Windows的平台上都可以有更多新的功能。它提供豐富的函數,使得在程序設計方面有著更好的支持。
PHP4.0整個腳本程序的核心大幅更動,讓程序的執行速度,滿足更快的要求。在最佳化之後的效率,已較傳統CGI或者ASP等程序有更好的表現。而且還有更強的新功能、更豐富的函數庫。無論您接不接受,PHP 都將在 Web CGI 的領域上,掀起巔覆性的革命。對於一位專業的Web Master 而言,它將也是必修課程之一。
PHP 4.0是更有效的,更可靠的動態Web頁開發工具,在大多數情況運行比 PHP 3.0要快,其腳本描述更強大並且更復雜, 最顯著的特徵是速率比的增加。PHP4.0這些優異的性能是PHP 腳本引擎重新設計產生的結果:引擎由 AndiGutmans 和 Zeev Suraski從底層全面重寫。PHP4.0 腳本引擎 ——Zend 引擎,使用了一種更有效的編譯——執行方式, 而不是PHP 3.0 採用的執行 ——當解析時模型。
PHP4在3.0版的基礎上增加或增強了許多有用的特徵,主要如下:
(1)別名:在PHP4中,可以利用引用為變數賦值,這給編程帶來了很大的靈活性。
(2)擴充了API 模塊:PHP 4.0 為擴展的 API 模塊的提供了擴展PHP介面模塊, 它比舊的 API 版本顯著地快。 PHP 模塊已有的及最常用的介面多數被轉換到使用這個擴展的介面。
(3)自動資源釋放:PHP4增加了引用計數功能,這種新技術的引入使PHP4具有了自動內存管理功能,減輕了開發人員的負擔。
(4)布爾類型:PHP 4.0 支持布爾類型。
(5)進程生成:在 UNIX 環境下的 PHP 4.0 提供了一個很智能和通用的生成進程, 使用了一種名為基於automake/libtool的系統生成技術。
(6)COM/DCOM 支持:PHP 4.0 提供 COM/DCOM 支持 ( 僅用於Windows 環境 ) 可以無縫地存取和訪問 COM 對象。
(7)與PHP 3.0 兼容性很好:PHP 4.0 是與 PHP 3.0 代碼向後兼容性接近100% 。由於 PHP 4 的改進的體系結構,兩者有一些細微的差別,但是大多數人將可能永遠不可能遇上這種情況。
PHP介紹
(8)配置:PHP4重新設計和增強了PHP。ini文件,這使得用PHP。ini來配置PHP顯得極為容易,這個文件可以在運行時被Apache(unix系統)或由Windows 注冊(Windows 環境)。
(9)加密支持:PHP4實現了完整的加密, 這些加密功能是一個完整的mycrypt庫,並且 PHP 4.0 支持哈希函數。Blowfish,TripleDES,MD5,並且SHA1 也是可使用的一些加密演算法。
(10)類型檢查:PHP 4.0 支持同一操作符用於評類型檢查:===( 3 等號運算符 ), 為在兩個值和其類型之間作檢查。例如, 3 ===3 將視為假 ( 類型是不同的 ), 而 3 ==3 ( 相等判斷 ) 將視為真。
(11)FTP 支持:PHP 4.0 支持 FTP 。通常, 你會為通過一個數據機連接下載一個大文件提供一個介面。然而, 如果你確實有需要,可以使用PHP 。
(12)PHP4新增函數或功能增強函數:PHP 4.0 新增了許多函數,同時也將許多現有的函數功能進行了增強,以下是一些例子。 array_count_values() eval() foreach() nclude() ob_end_clean() ob_end_flush() ob_get_contents() ob_start() strip_tags() unset()
(13)here列印:PHP 4.0 的Here列印是與Perl類似的, 盡管完全不相同。Here是列印大容量文章的一個有用的方法,例如在 HTML文件中,不會漏掉任何一個字元,例如目錄標記。
(14)HTTP Session fallback 系統:為 HTTP Session管理的一個 fallback 系統在 PHP 4.0被實現 。預設情況下,Session標識符由cookies存儲。如果沒有cookies支持或一項cookies任務失敗,Session標識符自動被創建並在 URL 的查詢字元串中被攜帶。
(15)ISAPI 支持:PHP 4.0 能作為一個個性化的 ISAPI 模塊作為 IIS插件 。這比 PHP 3.0 更有效, 它作為一個外部的程序來運行。
(16)內存:PHP 4.0 能更有效的使用內存, 導致較少的內存佔用消耗,這主要歸功於引用計數技術的實現。
(17)其他類成員函數:在 PHP 4.0 你能在成員函數本身的作用域或全局范圍內調用其他類的成員函數。例如,你能用一個子函數覆蓋父函數,並在子函數中調用父函數。
(18)多維數組:在 PHP 4.0 ,利用GET,POST,Cookies的進行的數據傳輸支持多維數組。
(19)個性化的 HTTP Session支持:HTTP Session處理, 包括 fallback 系統管理,在 PHP 4.0被它的新庫函數實現 。在版本 3.0 中處理Session要求使用 PHPLIB 和第三方的庫函數, 它比把Session直接地由 PHP 支持慢了許多。
(20)個性化的 Java 支持:PHP 4.0 支持和java的交互。這種個性化的Java 支持為PHP 在 Java 對象上創建和使用方法提供一個簡單並且有效的工具。
21)對象和數嵌套組:PHP 4.0 實現了功能更加強大的對象, 移去了 PHP 3.0存在的種種句法限制。對象能在數組以內被嵌套並且反過來也如此, 可以根據你的需要實現嵌套。
(22)面向對象的編程:PHP 4.0 為面向對象的編程和構造類及對象提供擴展的功能和新特徵。PHP4實現了對象重載,引用技術等新技術。
(23)對象重載支持:對象重載語法允許第三方的基於面向對象的類庫使用 PHP4 的面向對象的特徵存取他們自身的功能。使用這個特徵的一個 COM 模塊已經被實現了。
(24)輸出緩沖支持:PHP 提供了一個輸出緩沖函數集合。輸出緩沖支持允許你寫包裹函數功能壓縮緩沖區。在 PHP4 的輸出緩沖支持允許 HTML 頭信息存放, 無論 HTML的正文是否輸出。頭信息( (header(), content type, and cookies ) 不採用緩沖 。
(25)增加了PCRE 庫:PHP 4.0 包括一個 Perl 兼容的正則表達式 (PCRE ) 庫, 和正常regex庫一起與 PHP 綁定。split 和replace PCRE 功能被支持。PCRE 和 Perl 正規表達式之間有一些細微差別。
(26)PHP.ini 文件:PHP.ini文件在 PHP4.0 被重新設計, 使用的 PHP 的配置PHP.ini是更容易並且更有效的。全部文件能被Apache 在運行時間操作 ( 在 Apache環境 下 ) 或由 Windows 注冊表 ( 在 Windows 下面 ) 。被加入PHP.ini文件的配置指令自動地在所有相關的模塊中被支持。
(27)引用計數:PHP 4.0 為系統中的每個數值提供了引用計數, 包括資源。一旦一個資源不再被任何變數引用,它自動地被釋放以節省內存資源。利用這個特徵的最明顯的例子一個內置SQL查詢的循環語句。在PHP 3.0中 ,每次遞歸另外的 SQL 結果集合重復申請內存,直到腳本執行完畢,這些結果集合佔用的內存才被釋放。
(28)支持引用:通過引用可以改變一個變數的值。
(29)函數的運行時綁定:PHP 4.0 的運行時間綁定功能允許你在他們被聲明以前調用, 無論聲明是否在代碼以後或是在運行時間。
(30)類的運行時信息:PHP 4.0 支持在運行時刻存取下列類信息:一個對象的類名,一個對象的父類的類名字,以及對象函數所在的名字。
(31)伺服器抽象層:為支持Web伺服器提供了增強型 SAPI ( 伺服器 API ) 介面,是 PHP 4。0 不可分的一部分。這個伺服器抽象層,提供了通用的WEB伺服器介面支持,支持多線程WEB伺服器,為大多數的WEB伺服器提供透明的支持, 這些伺服器包括 Apache ,IIS ( ISAPI ), 以及 AOL 伺服器。
(32)語法的點亮顯示:PHP 4.0 語法的點亮顯示允許開發者看見源代碼而不是腳本, 這個功能比PHP 3。0中的更有效。它跑得更快,更執行得更好,並且產生更緊湊的HTML代碼。
(33)由引用改變變數的值:PHP 4.0 由引用支持可變的賦值, 「關聯」的2個變數之中個的任何一個的值被改變,另外的變數的值同樣被改變,這類似與C中的指針類型。
(34)在引用字元串中的變數引用:PHP 4.0 增強了在引用字元串中的變數引用。
PHP 在資料庫方面的豐富支持,也是它迅速走紅的原因之一,它支持下列的資料庫或是數據文件:
· Adabas D
· DBA
· dBase
· dbm
· filePro
· Informix
· InterBase
· mSQL
· Microsoft SQL Server
· MySQL
· Solid
· Sybase
· ODBC
· Oracle 8
· Oracle
· PostgreSQL
而在 Internet 上它也支持了相當多的通訊協議 (protocol),包括了與電子郵件相關的 IMAP, POP3;網管系統 SNMP;網路新聞 NNTP;帳號共用 NIS;全球信息網 HTTP 及 Apache 伺服器;目錄協議 LDAP 以及其它網路的相關函數。
除此之外,用 PHP 寫出來的 Web 後端 CGI 程序,可以很輕易的移植到不同的操作系統上。例如,先以 Linux 架的網站,在系統負荷過高時,可以快速地將整個系統移到 SUN 工作站上,不用重新編譯 CGI 程序。面對快速發展的 Internet,這是長期規劃的最好選擇。
變數類型:
PHP有好多種變數; 主要有這些:
- 數字 (integer - 例: 32)
- 布林值 (boolean - 例: TRUE)
- 字串 (string - 例: 'a string of text')
- NULL
- 資源(resource)
- 陣列 (array - 例: arrayname[2])
語法:
語法有三種:
//comment
/* comment */
# comment
基本的 "Control Structures":
* if ... else
if (condition == true) ;
* if ... else then
if (condition == true)
else if (condition2 == true) ;
一個PHP實例:
<html>
<head>
<title>First program</title>
</head>
<body>
<?php
echo "hello world";
?>
</body>
</html>
請看:
www.php.net
php對面向對象的支持
面向對象編程的概念:
不同的作者之間說法可能不一樣,但是一個OOP語言必須有以下幾方面:
抽象數據類型和信息封裝
繼承
多態
在PHP中是通過類來完成封裝的:
<?php
class Something {
// 在OOP類中,通常第一個字元為大寫
var $x;
function setX($v) {
// 方法開始為小寫單詞,然後使用大寫字母來分隔單詞,例如getValueOfArea()
$this->x=$v;
}
function getX() {
return $this->x;
}
}
當然你可以按自己的喜好進行定義,但最好保持一種標准,這樣會更有效。數據成員在類中使用"var"聲明來定義,在給數據成員賦值之前,它們是沒有類型的。一個數據成員可以是一個整數,一個數組,一個相關數組(associative array)或者是一個對象。方法在類中被定義成函數形式,在方法中訪問類成員變數時,你應該使用$this->name,否則對一個方法來說,它只能是局部變數。
使用new操作符來創建一個對象:
$obj=new Something;
然後你可以使用成員函數通過:
$obj->setX(5);
$see=$obj->getX();
在這個例子中,setX成員函數將5賦值給對象的成員變數x(不是類的),然後getX返回它的值5。可以象:$obj->x=6那樣通過類引用方式來存取數據成員,這不是一個很好的OOP習慣。我強烈建議通過方法來存取成員變數。如果你把成員變數看成是不可處理的,並且只通過對象句柄來使用方法,你將是一個好的OOP程序員。不幸的是,PHP不支持聲明私有成員變數,所以不良代碼在PHP中也是允許的。繼承在PHP中很容易實現,只要使用extend關鍵字。
<?php
class Another extends Something {
var $y;
function setY($v) {
$this->y=$v;
}
function getY() {
return $this->y;
}
}
"Another"類的對象現在擁有了父類(Something)的全部的數據成員及方法,而且還加上了自己的數據成員和方法。
你可以使用
$obj2=new Something;
$obj2->setX(6);
$obj2->setY(7);
PHP現在還不支持多重繼承,所以你不能從兩個或兩個以上類派生出新的類來。你可以在派生類中重定義一個方法,如果我們在"Another"類中重定義了getX方法,我們就不能使 用"Something"中的getX方法了。如果你在派生類中聲明了一個與基派同名的數據成員,那麼當你處理它時, 它將「隱藏」基類的數據成員。
你可以在你的類中定義構造函數。構造函數是一個與類名同名的方法,當你創建一個類的對象時會被調用,例如:
<?php
class Something {
var $x;
function Something($y) {
$this->x=$y;
}
function setX($v) {
$this->x=$v;
}
function getX() {
return $this->x;
}
}
所以你可以創建一個對象,通過:
$obj=new Something(6);
構造函數會自動地把6賦值給數據變數x。構造函數和方法都是普通的PHP函數,所以你可以使用預設參數。
function Something($x="3",$y="5")
接著:
$obj=new Something(); // x=3 and y=5
$obj=new Something(8); // x=8 and y=5
$obj=new Something(8,9); // x=8 and y=9
預設參數使用C++的方式,所以你不能忽略Y的值,而給X一個預設參數,參數是從左到右賦值的,如果傳入的參數少於要求的參數時,其作的將使用預設參數。
當一個派生類的對象被創建時,只有它的構造函數被調用,父類的構造函數沒被調用,如果你想調用基類的構造函數,你必須要在派生類的構造函數中顯示調用。可以這樣做是因為在派生類中所有父類的方法都是可用的。
<?php
function Another() {
$this->y=5;
$this->Something();
//顯示調用基類構造函數
}
OOP的一個很好的機制是使用抽象類。抽象類是不能實例化,只能提供給派生類一個介面。設計者通常使用抽象類來強迫程序員從基類派生,這樣可以確保新的類包含一些期待的功能。在PHP中沒有標準的方法,但是:如果你需要這個特性,可以通過定義基類,並在它的構造函數後加上"die" 的調用,這樣就可以保證基類是不可實例化的,現在在每一個方法(介面)後面加上"die" 語句,所以,如果一個程序員在派生類中沒有覆蓋方法,將引發一個錯誤。而且因為PHP 是無類型的,你可能需要確認一個對象是來自於你的基類的派生類,那麼在基類中增加一個方法來實義類的身份(返回某種標識id),並且在你接收到一個對象參數時校驗這個值。當然,如果一個邪惡不好的程序員在派生類中覆蓋了這個方法,這種方法就不起作用了,不過一般問題多發現在懶惰的程序員身上,而不是邪惡的程序員。
當然,能夠讓基類對程序員無法看到是很好的,只要將介面列印出來做他們的工作就可以了。在PHP中沒有析構函數。
重載(與覆蓋不同)在PHP中不支持。在OOP中,你可以重載一個方法來實現兩個或重多的方法具有相同的名字,但是有不同數量或類型的參數(這要看語言)。PHP 是一種鬆散類型的語言,所以通過類型重載不起作用,然而通過參數的個數不同來重載也不起作用。
有時在OOP中重載構造函數非常好,這樣你可以通過不同的方法創建對象(傳遞不同數量的參數)。在PHP中實現它的技巧是:
<?php
class Myclass {
function Myclass() {
$name="Myclass".func_num_args();
$this->$name();
//注意$this->name()一般是錯誤的,但是在這里$name是一個將被調用方法的名字
}
function Myclass1($x) {
code;
}
function Myclass2($x,$y) {
code;
}
}
通過在類中的額外的處理,使用這個類對用戶是透明的:
$obj1=new Myclass('1'); //將調用Myclass1
$obj2=new Myclass('1','2'); //將調用Myclass2
有時這個非常好用。
多態
多態是對象的一種能力,它可以在運行時刻根據傳遞的對象參數,決定調用哪一個對象的方法。例如,如果你有一個figure的類,它定義了一個draw的方法。並且派生了circle和rectangle 類,在派生類中你覆蓋了draw方法,你可能還有一個函數,它希望使用一個參數x,並且可以調用$x->draw() 。如果你有多態性,調用哪個draw方法就依賴於你傳遞給這個函數的對象類型。
多態性在象PHP這樣的解釋語言(想像一下一個C++編譯器生成這樣的代碼,你應該調用哪一個方法?你也不知道你擁有的對象是什麼類型的,好,這不是重點)是非常容易和自然的。所以PHP當然支持多態性。
<?php
function niceDrawing($x) {
//假設這是Board類的一個方法
$x->draw();
}
$obj=new Circle(3,187);
$obj2=new Rectangle(4,5);
$board->niceDrawing($obj);
//將調用Circle的draw方法
$board->niceDrawing($obj2);
//將調用Rectangle的draw方法
用PHP進行面向對象編程
一些"純化論者(purists)"可能會說PHP不是一個真正的面向對象的語言,這是事實。PHP 是一個混合型語言,你可以使用OOP,也可以使用傳統的過程化編程。然而,對於大型項目,你可能想/需要在PHP 中使用純的OOP去聲明類,而且在你的項目只用對象和類。
隨著項目越來越大,使用OOP可能會有幫助,OOP代碼很容易維護,容易理解和重用。這些就是軟體工程的基礎。在基於web的項目中應用這些概念就成為將來網站成功的關鍵。
PHP的高級OOP技術
在看過基本的OOP概念後,我就可以向你展示更高級的技術:
序列化(Serializing)
PHP不支持永久對象,在OOP中永久對象是可以在多個應用的引用中保持狀態和功能的對象,這意味著擁有將對象保存到一個文件或資料庫中的能力,而且可以在以後裝入對象。這就是所謂的序列化機制。PHP 擁有序列化方法,它可以通過對象進行調用,序列化方法可以返回對象的字元串表示。然而,序列化只保存了對象的成員數據而不包話方法。
在PHP4中,如果你將對象序列化到字元串$s中,然後釋放對象,接著反序列化對象到$obj,你可以繼續使用對象的方法!我不建議這樣去做,因為(a)文檔中沒有保證這種行為在以後的版本中仍然可以使用。(b) 這個可能導致一種誤解,在你把一個序列化後的版本保存到磁碟並退出腳本時。當以後運行這個腳本時,你不能期待著在反序列化一個對象時,對象的方法也會在那裡,因為字元串表示根本就不包括方法。
總而言之,PHP 進行序列化對於保存對象的成員變數非常有用。(你也可以將相關數組和數組序列化到一個文件中)。
例子 :
<?php
$obj=new Classfoo();
$str=serialize($obj);
//保存$str到磁碟上
//幾個月以後
//從磁碟中裝入str
$obj2=unserialize($str)
你恢復了成員數據,但是不包括方法(根據文檔所說)。這導致了只能通過類似於使用$obj2->x來存取成員變數(你沒有別的方法!)的唯一辦法,所以不要在家裡試它。
有一些辦法可以解決這個問題,我把它留著,因為對這篇簡潔的文章來說,他們太不好。我會很高興地歡迎在PHP的後續版本中有全序列化的特性。
使用類進行數據存儲PHP和OOP一件非常好的事情就是,你可以很容易地定義一個類來操作某件事情,並且無論何時你想用的時候都可以調用相應的類。假設你有一個HTML表單,用戶可以通過選擇產品ID號來選擇一個產品。在資料庫中有產品的信息,你想把產品顯示出來,顯示它的價格等等。你擁有不同類型的產品,並且同一個動作可能對不同的產品具有不同的意思。例如,顯示一個聲音可能意味著播放它,但是對於其它種類的產品可能意味著顯示一個存在資料庫中的圖片。你可以使用OOP或PHP來減少編碼並提高質量:
定義一個產品的類,定義它應該有的方法(例如:顯示),然後定義對每一種類型的產品的類,從產品類派後出來(SoundItem類,ViewableItem類,等等),覆蓋在產品類中的方法,使它們按你的想法動作。
根據資料庫中每一種產品的類型(type)欄位給類命名,一個典型的產品表可能有(id, type, price, description, 等等欄位)...然後在處理腳本中,你可以從資料庫中取出type值,然後實例化一個名為type的對象:
<?php
$obj=new $type();
$obj->action();
這是PHP的一個非常好的特性,你可以不用考慮對象的類型,調用$obj的顯示方法或其它的方法。使用這個技術,你不需要修改腳本去增加一個新類型的對象,只是增加一個處理它的類。
這個功能很強大,只要定義方法,而不去考慮所有對象的類型,在不同的類中按不同的方法實現它們,然後在主腳本中對任意對象使用它們,沒有if...else,也不需要兩個程序員,只有高興。
現在你同意編程是容易的,維護是便宜的,可重用是真的嗎?
如果你管理一組程序員,分配工作就是很簡單的了,每個人可能負責一個類型的對象和處理它的類。
可以通過這個技術實現國際化,根據用戶所選的語言欄位應用相應的類就可以了,等等。
拷貝和克隆
當你創建一個$obj的對象時,你可以通過$obj2=$obj來拷貝對象,新的對象是$obj的一個拷貝(不是一個引用),所以它具有$obj在當時的狀態。有時候,你不想這樣,你只是想生成一個象obj類一樣的一個新的對象,可以通過使用new語句來調用類的構造函數。在PHP中也可以通過序列化,和一個基類來實現,但所有的其它類都要從基類派生出來。
進入危險區域
當你序列化一個對象,你會得到某種格式的字元串,如果你感興趣,你可以調究它,其中,字元串中有類的名字(太好了!),你可以把它取出來,象:
<?php
$herring=serialize($obj);
$vec=explode(':',$herring);
$nam=str_replace("\"",'',$vec[2]);
所以假設你創建了一個"Universe"的類,並且強制所有的類都必須從universe擴展,你可以在universe 中定義一個clone的方法,如下:
<?php
class Universe {
function clone() {
$herring=serialize($this);
$vec=explode(':',$herring);
$nam=str_replace("\"",'',$vec[2]);
$ret=new $nam;
return $ret;
}
}
//然後
$obj=new Something();
//從Universe擴展
$other=$obj->clone();
你所得到的是一個新的Something類的對象,它同使用new方法,調用構造函數創建出的對象一樣。我不知道這個對你是否有用,但是Universe類可以知道派生類的名字是一個好的經驗。想像是唯一的限制。
php的最新版本是5.2.3(2007-07-01更新)
6. php格式用什麼打開 php種子怎麼打開
首先php不是種子文件,php是一種編程語言。就比如HTML一樣,一種wab編程語言。就是傳說中苦逼程序猿編寫的文件。
如果只是打開php文件,最原始的方式可以直接使用記事本打開,就可以看到裡面的代碼。
如果是要運行php文件,就需要按照php的運行環境了。
最簡單的php運行返回。在自己電腦上安裝一個叫 wamp的軟體。
然後把php文件放到www目錄下面。
7. 我的蘋果電腦怎麼放歌沒有聲音
遇到蘋果電腦播放音樂沒有聲音的問題?不要著急,php小編子墨為您詳解解決方法。本篇文章將深入分析這個問題,指導您逐步排除故障,恢復您的音樂播放體驗。繼續往下閱讀,了解常見的故障原因和對應的解決步驟。
一、我的蘋果電腦怎麼放歌沒有聲音?
如出現蘋果電腦放音樂沒有聲音的情況,可通過以下步驟進行排障解決:
1、點擊控制面板,選擇聲音,點擊設置,查看是否有靜音設置;
2、打開其他的播放軟體查看是否有使用,查看播放軟體中是否調為靜音,找到音量調節條進行調節;
3、點擊我的電腦,選擇屬性,點擊硬體,查看音效卡驅動是否正常;
4、如聲音驅動沒有安裝好,在設備管理出現一個黃色的「?」或在聲音,視頻和游戲控制器,聲音音頻控制器有個黃色的標識,可將驅動卸了重裝;
5、如仍無改善,建議聯系售後具體查看核實。
二、蘋果電腦放歌鍵盤顯字?
蘋果筆記本電腦鍵盤顯示文字是輸入法的自動聯想功能,可以將輸入法的聯想功能關閉,後面鍵盤上就不會出現文字,只會出現輸入的文字了。解決這一問題的方法步驟如下:
一、重新開機。
重新開機後,好多臨時文件和垃圾文件自動清除,可以有效地改善機器的兼容性、穩定性。
二、如果問題比較嚴重,恢復出廠設置。
三、seratodj放歌怎麼沒有聲音?
可能是音頻介面沒有連接好或驅動程序沒有正確安裝。 這種情況下,需要檢查音頻介面是否正確連接,並嘗試重新安裝相應的驅動程序。如果這些方法都不起作用,可能是因為設備故障導致的,需要進一步維修或更換設備。 另外,使用seratodj放歌時,還需要注意一些其他的聲音設置,比如音量大小、聲道選擇等,這些因素也會影響到播放效果。因此,在檢查設備問題的同時,也要確保軟體和音頻設置都正確才能保證播放效果。
四、蘋果手機怎麼鏈接蘋果電腦放歌?
蘋果手機和蘋果電腦之間可以使用以下方法進行音樂傳輸:
1. 使用USB數據線連接:將iPhone和Mac電腦使用原裝的Lightning轉USB數據線連接起來。在手機上解鎖並選擇"信任該計算機",然後在電腦上 iTunes 應用程序中會出現你的手機圖標,點擊它,選擇"音樂"選項卡,然後將歌曲拖放到 iTunes 中進行同步,最後將歌曲同步到你的iPhone上。
2. 使用AirDrop傳輸:確保你的iPhone和Mac電腦都開啟了藍牙和Wi-Fi功能,並且雙方都已登錄同一iCloud賬戶。在iPhone上打開控制中心,長按音樂控制卡片,然後點擊音樂控制右上方的AirDrop圖標,選擇你的Mac電腦。在電腦上,你將收到一個提示窗口,點擊接受即可傳輸歌曲。
3. 使用iCloud音樂庫:將你的音樂添加到iCloud音樂庫,然後就可以從蘋果電腦的iTunes應用程序上訪問它。在Mac電腦上打開iTunes,點擊"賬戶"菜單,選擇"授權本機",並使用你的Apple ID進行登錄。然後點擊"音樂",在左側菜單中選擇"iCloud音樂庫",找到以前導入的歌曲並進行播放。