編譯指令多發
A. 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更新)
B. HLA是什麼
HLA有四種不同意思,具體如下:
1、HLA:海瀾之家/HLA
「海瀾之家」(英文縮寫:HLA)是海瀾之家股份有限公司旗下的服裝品牌,主要採用連鎖零售的模式,銷售男性服裝、配飾與相關產品。2014年4月11日,海瀾之家正式登陸A股市場,證券代碼為:600398。
2、HLA:高級體系結構
HLA(高級體系結構,High Level Architecture),在美國國防建模與模擬辦公室(DMSO)1995年10月制定的建模與模擬主計劃(MSMP)中,提出了未來建模/模擬的共同技術框架。
3、HLA:高級匯編
HLA是加州大學教授用來講解匯編語言編程和機器組織的一個工具,經過幾年的發展,如今已經成為了資深匯編語言程序員編寫可讀性強,功能強大的匯編程序的開發平台。
HLA只要一遇到這些語句,就把他們編譯成一個或多個真正的機器指令,盡管很方便,但是它並不是真正的匯編語言,只是一個為了可以編寫出方便閱讀,和思考的翻譯器!
4、HLA:人類白細胞抗原
HLA(human leukocyte antigen ,人類白細胞抗原)是人類的主要組織相容性復合體(MHC)的表達產物,該系統是目前所知人體最復雜的多態系統。自1958年發現(Jean Dausset)第一個HLA抗原。
到20世紀70年代,HLA便成為免疫遺傳學、免疫生物學和生物化學等學科的一個重要新興研究領域。現在,已基本弄清其系統的組成、結構和功能,闡明了其理化性質和生物學作用。這些研究成果不僅具有重要的理論意義,而且具有巨大的生物醫學價值。
(2)編譯指令多發擴展閱讀:
HLA包括三個方 面:高層體系結構、任務空間概念模型和數據標准。它們的共同目標是實現模擬間的互操作,並促進模擬資源的重用,具體地說, 就是通過計算機網路使得分散分布的各模擬部件能夠在一個統一的模擬時間和模擬環境下協調運行,且可以重復使用。
HLA的基本思想就是使用面向對象的方法, 設計、開發及實現系統不同層次和粒度的對象模型,來獲得模擬部件和模擬系統高層次上的互操作性與可重用性。1996年8月DMSO正式公布了HLA的定義和規范。
經過改進完善,HLA的規則、介面規范、對象模型模板三項內容已在2000年9月22日由美國 IEEE標准化委員會正式定為IEEE1516, IEEE1516.1,IEEE1516.2 HLA標准。OMG,北約M&S組織也採納HLA作為標准。
C. 誰能給我多發點後綴名啊,平時有好多後綴我都不知道是什麼文件,誰能給我發一些順便都告訴是什麼文件。
A 對象代碼庫文件
AAM Authorware shocked文件
AAS Authorware shocked包
ABF Adobe二進制屏幕字體
ABK CorelDRAW自動備份文件
ABS 該類文件有時用於指示一個摘要(就像在一篇有關科學方面的文章的一個摘要或概要,取自abstract)
ACE Ace壓縮檔案格式
ACL CorelDRAW 6鍵盤快捷鍵文件
ACM Windows系統目錄文件
ACP Microsoft office助手預覽文件
ACR 美國放射醫學大學文件格式
ACT Microsoft office助手文件
ACV OS/2的驅動程序,用於壓縮或解壓縮音頻數據
AD After Dark屏幕保護程序
ADA Ada源文件(非-GNAT)
ADB Ada源文件主體(GNAT);HP100LX組織者的約定資料庫
ADD OS/2用於引導過程的適配器驅動程序
ADF Amiga磁碟文件
ADI AutoCAD設備無關二進制繪圖儀格式
ADM After Dark多模塊屏幕保護;Windows NT策略模板
ADP FaxWork用於傳真數據機的交互安裝文件;Astound Dynamite文件
ADR After Dark薠�聊槐;ぃ籗mart Address的地址簿
ADS Ada源文件說明書(GNAT)
AFM Adobe的字體尺度
AF2,AF3 ABC的FlowChat文件
AI Adobe Illustrator格式圖形
AIF,AIFF 音頻互交換文件,Silicon Graphic and Macintosh應用程序的聲音格式
AIFC 壓縮AIF
AIM AOL即時信息傳送
AIS ACDSee圖形序列文件;Velvet Studio設備文件
AKW RoboHELP的幫助工程中所有A-關鍵詞
ALAW 歐洲電話音頻格式
ALB JASC Image Commander相冊
ALL 藝術與書信庫
AMS Velvet Studio音樂模塊(MOD)文件;Extreme的Tracker模塊文件
ANC Canon Computer的調色板文件,包含一系列可選的顏色板
ANI Windows系統中的動畫游標
ANS ANSI文本文件
ANT SimAnt For Windows中保存的游戲文件
API Adobe Acrobat使用的應用程序設計介面文件
APR Lotus Approach 97文件
APS Microsoft Visual C++文件
ARC LH ARC的壓縮檔案文件
ARI Aristotle聲音文件
ARJ Robert Jung ARJ壓縮包文件
ART Xara Studio籜�募�籆anon Crayola美術文件;Clip Art文件格式;另一種光線跟蹤格式;AOL使用的用Johnson—Grace壓縮演算法壓縮的標記文件
ASA Microsoft Visual InterDev文件
ASC ASCⅡ文本文件;PGP演算法加密文件
ASD Microsoft Word的自動保存文件;Microsoft高級流媒體格式(microsoft advanced
streaming FORMat,ASF)的描述文件;可用NSREX打開 Velvet Studio例子文件
ASE Velvet Studio采樣文件
ASF Microsoft高級流媒體格式文件
ASM 匯編語言源文件,Pro/E裝配文件
ASO Astound Dynamite對象文件
ASP 動態網頁文件;ProComm Plus安裝與連接腳本文件;Astound介紹文件
AST Astound多媒體文件;ClarisWorks「助手」文件
ASV DataCAD自動保存文件
ASX Cheyenne備份腳本文件;Microsoft高級流媒體重定向器文件,視頻文件
ATT AT< Group 4點陣圖文件
ATW 來自個人軟體的Any Time Deluxe For Windows個人信息管理員文件
AU Sun/NeXT/DEC/UNIX聲音文件;音頻U-Law(讀作「mu-law」)文件格式
AVB Computer Associates Inoculan反病毒軟體的病毒感染後文件
AVI Microsoft Audio Video Interleave電影格式
AVR Audio Visual Research文件格式
AVS 應用程序可視化格式
AWD FaxVien文檔
AWR Telsis數字儲存音頻文件擴展名格式
Axx ARJ壓縮文件的分包序號文件,用於將一個大文件壓至幾個小的壓縮包中(xx取01-99的數字)
A3L Authorware 3.x庫文件
A4L Authorware 4.x庫文件
A5L Authorware 5.x庫文件
A3M,A4M Authorware Macintosh未打包文件
A4P Authorware無運行時間的打包文件
A3W,A4W,A5W 未打包的Authorware Windows文件
BAK 備份文件
BAS BASIC源文件
BAT 批處理文件
BDF West Point Bridger Designer文件
BFC Windows 95 Briefcase文檔
BG Backgammon For Windows下的游戲文件
BGL Microsoft Flight Simulator(微軟飛行模擬器)的視景文件
BI 二進制文件
BIF Group Wise的初始化文件
BIFF XLIFE 3D格式文件
BIN 二進制文件
BK,BK$ 有時用於代表備份版本
BKS IBM BookManager Read書架文件
BMK 書簽文件
BMP Windows或OS/2點陣圖文件
BMI Apogee BioMenace數據文件
BOOK Adobe FrameMaker Book文件
BOX Lotus Notes的郵箱文件
BPL Borlard Delph 4打包庫
BQY BrioQuery文件
BRX 用於查看多媒體對象目錄的文件
BSC MS Developer Studio瀏覽器信息文件
BSP Quake圖形文件
BS1 Apogee Blake Stone數據文件
BS_ Microsoft Bookshelf Find菜單外殼擴展名
BTM Norton 應用程序使用的批處理文件
BUD Quicken的備份磁碟
BUN CakeWalk 聲音捆綁文件(一種MIDI程序)
BW SGI黑白圖像文件
BWV 商業波形文件
BYU BYU的電影文件格式
B4 Helix Nuts and Bolts文件
C C代碼文件
C0l 台風波形文件
CAB Microsoft壓縮檔案文件
CAD Softdek的Drafix CAD文件
CAL CALS壓縮點陣圖;[非法語句]歷計劃表數據
CAM Casio照相機格式
CAP 壓縮音樂文件格式
CAS 逗號分開的ASCⅡ文件
CAT Quicken使用 的IntellCharge分類文件
CB Microsoft干凈引導文件
CBI 二進制卷格式文件(用於IBM大型機系統)
CC Visual dBASE用戶自定義類文件
CCA cc:郵件文件
CCB Visual Basic動態按鈕配置文件
CCF 多媒體查看器配置文件,用於OS/2
CCH Corel圖表文件
CCM Lotus cc:郵箱(例如「INBOX.CCM」)
CCO CyberChat數據文件
CCT Macromedia Director Shockwave投影
CDA CD音頻軌道
CDF Microsoft頻道定義格式文件
CDI Philip的高密盤交互格式
CDM Visual dBASE自定義數據模塊文件
CDR CorelDRAW繪圖文件;原始音頻CD數據文件
CDT CorelDRAW模板
CDX CorelDRAW壓縮繪圖文件;Microsoft Visual FoxPro索引文件
CEL CIMFast事件語言文件
CER 證書文件(MIME x-x509-ca-cert)
CFB Compton的多媒文件
CFG 配置文件
CFM CotdFusion模板文件;Visual dBASE Windows用戶定製表單
CGI 公共網關介面腳本文件
CGM 計算機圖形元文件
CH OS/2配置文件
CHK 由Windows磁碟碎片整理器或磁碟掃描保存的文件碎片
CHM 編譯過的HTML文件
CHR 字元集(字體文件
CHP Ventura Publisher章節文件
CHT ChartViem文件;Harvard Graphics矢量文件
CIF Adaptec CD 創建器 CD映像文件
CIL Clip Gallery下載包
CIM SimCity 2000文件
CIN OS/2改變控制文件用於跟蹤INI文件中的變化
CK1 iD/Apogee Commander Keen 1數據文件
CK2 iD/Apogee Commander Keen 2數據文件
CK3 iD/Apogee Commander Keen 3數據文件
CK4 iD /Apogee Commander Keen 4數據文件
CK5 iD /Apogee Commander Keen 5數據文件
CK6 iD /Apogee Commander Keen 6數據文件
CLASS Java類文件
CLL Crick Software Clicker文件
CLP Windows 剪貼板文件
CLS Visual Basic類文件
CMD Windows NT,OS/2的命令文件;DOS CD/M命令文件;dBASEⅡ程序文件
CMF Corel元文件
CMG Chessmaster保存的游戲文件
CMP JPEG點陣圖文件;地址文檔
CMV Corel Move動畫文件
CMX Corel Presentation Exchange圖像
CNF Telnet,Windows和其他其內格式會發生改變的應用程序使用的配置文件
CNM Windows應用程序菜單選項和安裝文件
CNQ Compuworks Design Shop文件
CNT Windows(或其他)系統用於幫助索引或其他目的內容文件
COB TrueSpace 2對象文件
COD Microsoft C編譯器產生的可顯示機器碼/匯編代碼文件,其中附有源C代碼作為注釋
COM 命令文件(程序)
CPD Corel Print Office文件(圖形)
CPD,CPE 傳真覆蓋文檔
CPI Microsoft MS-DOS代碼頁信息文件
CPL 控制面板擴展名,Corel顏色板
CPO Corel列印存儲文件
CPP C++代碼文件
CPR Corel提供說明書文件
CPT Corel 照片-籜�枷?
CPX Corel Presentation Exchange壓縮圖形文件
CRD Windows Cardfile文件
CRP Corel 提供的運行時介紹文件;Visual dBASE自定義報表文件
CRT 認證文件
CSC Corel腳本文件
CSP PC Emcee On_Screen圖像
CSS 瀑布式表格文件
CST Macromedia Director Cast文件
CSV 逗號分隔的值文件
CT Scitex CT點陣圖文件;Paint Shop Pro Grapic編輯器文件
CTL 通常用於表示一個包含控制項信息的文件;FaxWork用它來保持有關每個傳真收到或發出的信息
CUE Microsoft提示牌數據文件
CUR Windows游標文件
CUT Dr Halo點陣圖文件
CV Corel版本的檔案文件;Microsoft CodeView信息屏幕文件
CWK ClarisWorks數據文件.
CWS ClarisWorks模塊
CXT Macromedia Director受保護的(不可編輯的)投影文件
CXX C++源代碼文件
DAT 數據文件;WrodPerfect合並數據文件;用於一些MPEG格式的文件
DB Borland的Paradox 7表
DBC Microsoft Visual FoxPro資料庫容器文件
DBF dBASE文件,一種由Ashton-Tate創建的格式,可以被ACT!、Lipper、FoxPro、Arago、Wordtech、Xbase和類似資料庫或與資料庫有關產品識別;可用數據文件(能被Excel 97打開);Oracle 8.1.x表格空間文件
DBX DataBearn圖像;Microsoft Visual FoxPro表格文件
DCM DCM模塊格式文件
DCR 沖擊波文件
DCS 桌面顏色分隔文件
DCT Microsoft Visual FoxPro資料庫容器
DCU Delphi編譯單元文件
DCX Microsoft Visual FoxPro資料庫容器;基覺CX的傳真圖像;宏
DC5 DataCAD繪圖文件
DDF Btrieve或Xtrieve數據定義文件,它包含用於描述Btrieve或Xtrieve文件的元數據
DDIF Digital Equipment或 Compaq格式,用於保存他們圖像與字處理文檔
DEF SmartWareⅡ數據文件;C++模塊定義文件
DEFI Oracle 7 卸載腳本文件
DEM 用於表示數字高度模型的USGS基準的文件
DER 認證文件
DEWF Macintosh Sound Cap/Sound Edit錄音設備格式
DGN Macintosh 95 CAD繪圖文件
DIB 設備無關點陣圖
DIC 目錄
DIF 可進行數據互換的電子表格
DIG DigiLink格式;Sound DesignerⅠ音頻文件
DIR MacromediaDirector文件
DIZ 描述文件
DLG C++對話框腳本文件
DLL 動態鏈接庫
DLS 可下載聲音文件
DMD Visual dBASE數據模塊文件
DMF X-Trakker音樂模塊(MOD)文件
DOC FrameMaker或FrameBuilder文檔;Word Star文檔、Word Perfect文檔、Microsoft Word文檔;DisplayWrite文檔
DOT Microsoft Word文檔模板
DPL Borland Delph3壓縮庫
DPR Borland Delphi工程頭文件
DRAW Acorn的基於對象的矢量圖像文件
DRV 驅動程序
DRW Micrografx Designer/Draw;Pro/E籜�募?
DSF Micrografx Designer VFX文件
DSG DOOM保存的文件
DSM Dynamic Studio音樂模塊(MOD)文件
DSP Microsoft Developer Studio工程文件
DSQ Corel QUERY(查詢)文件
DST 刺綉機圖形文件
DSW Microsoft Developer Studio工作區文件
DTA Word Bank(世界銀行)的STARS數據文件
DTD SGML文檔類型定義(DTD)文件
DTED 地面高度數字數據(圖形的數據格式)文件
DTF Symantec Q&A相關的資料庫數據文件
DTM DigiTrakker模塊文件
DUN Microsoft拔號網路導出文件
DV 數字視頻文件(MIME)
DWD DiamondWare數字化文件
DWG AutoCAD工程圖文件;AutoCAD或Generic CADD老版本的繪圖格式
DXF 可進行互交換的繪圖文件格式,二進制的DWG格式的文本表示;數據交換文件
DXR Macromedia Director受保護(不可編輯)電影文件
D64 Commodore的64位模擬磁碟圖像文件
EDA Ensoniq ASR磁碟映像
EDD 元素定義文檔(FrameMaker+SGML文檔)
EDE Ensoniq EPS磁碟映像
EDK Ensoniq KT磁碟映像
EDQ Ensoniq SQ1/SQ2/Ks32磁碟映像
EDS Ensoniq SQ80磁碟映像
EDV Ensoniq VFX-SD磁碟映像
EFA Ensoniq ASR文件
EFE Ensoniq EPS文件
EFK Ensoniq KT文件
EFQ Ensoniq SQ1/SQ2/Ks32文件
EFS Ensoniq SQ80文件
EFV Ensoniq VFX-SD文件
EMD ABT擴展模塊
EMF Windows增強元文件
EML Microsoft Outlook Express郵件消息(MIME RTC822)文件
ENC 重演文
ENFF 中性文件格式擴展名
EPHTML Perl解釋增強HTML文件
EPS 壓縮的PostScript圖像
EPSF 壓縮的PostScript文件
ERI ERWin文件
ERR 當RobooHELP幫助編譯器企圖編譯一個幫助系統源文件時用來存儲錯誤消息的文件
EPX ERWin文件
ESPS ESPS音頻文件
EUI Ensoniq ESP家族的壓縮磁碟映像
EVY 特使文檔
EWL Microsoft Encarta文檔
EXC Microsoft Word禁止字字典
EXE 可執行文件(程序)
F FORTRAN文
F2R Farandoyle線性模塊格式
F3R Farandoyle分塊線性模塊格式
F77 FORTRAN文件
F90 FORTRAN文件
FAR Fradole Composer音樂模塊(MOD)文件
FAV Microsoft Outlook導航條
FAX 傳真類型圖像
FBK Navison 金融備份
FCD 虛擬CD-ROM
FDB Navison 金融資料庫
FDF Adobe Acrobat表單文檔文件
FEM CADRE有限元素網路文件
FFA,FFL,FFO,FFK Microsoft快速查找文件
FFF GUS PnP銀行文件格式
FFT 最終格式文本(IBM的DCA一部分)
FH3 Als Freehand 3繪圖文件
FIF Fractal圖像文件
FIG REND386/AVRIL使用的文件格式
FITS CCD照相機圖像;靈活圖像傳輸系統
FLA Macromedia Flash電影
FLC Autodesk FLIC動畫文件
FLF Corel Paradox產生的格式:Navison Financials許可文件;OS/2驅動程序文件
PDG 超星閱讀器文件
PLI Autodesk FLIC動畫
FLT StarTrekker音樂模塊(MOD)文件;MultiGen Inc的Open Flight使用的文件格式;Corel過濾器文件
FM Adobe FrameMaker文檔
FMB Oracle4.0癤蛞院蟀奼頸淼サ畝��圃創�胛募?
FML 文件鏡象列表(GetRight)
FMT Oracle 4.0癤蛞院蟀奼頸淼サ奈謀靖袷劍籑icrosoft Schele+ 列印文件
FMX Oracle 4.0癤蛞院蟀奼究芍蔥斜淼?
FND Microsoft Explorer保存的搜索文件(Find applet)
FNG 字體組文件(字體導航器,Font Navigator)
FNK Funk Tracker模塊格式
FOG Fontographer模塊字體
FON 系統字體
FOR FORTRAN文件
FOT 字體相關文件
FP FileMaker Pro文件
FP1 Flying Pigs for Windows數據文件
FP3 FileMaker Pro文件
FPT FileMaker Pro文件;Microsoft Fox Pro備注字體文件
FPX FlashPix點陣圖
FRM 表單;Frame Maker或Frame Builder文檔;Oracle可執行表(3.0癤蛟縉詘奼?;Visual Basic表單;WordPerfect Merge表單;DataCAD標志報表文件
FRT Microsoft FoxPro報表文件
FRX Visual Basic表單文本;Microsoft FoxPro報表文件
FSF fPrint Audit Tool文件格式
FSL Borland的Paradox 7表單;Corel Paradox保存的表單
FSM Parandoyle示例格式
FT Lotus Notes全文本索引
FTG 全文本搜索組文件,由Windows幫助系統查找時產生——可以刪除,並在需要時重建起來
FTS 全文本搜索引文件,由Windows幫助系統查找時產生
FW2 Framework Ⅱ文件
FW3 Framework Ⅲ文件
FW4 Framework Ⅳ文件
FXP 經Microsoft FoxPro編譯的源文件
FZB Casio FZ-1銀行轉儲
FZF Casio FZ-1完全轉儲
FZV Casio FZ-1聲音轉儲
G721 Raw CCITT G.721 $bit ADPCM格式數據
G723 Raw CCITT G.723 3或5bit ADPCM格式數據
GAL Corel多媒體管理器相集
GCD Generic CADD籜�募�ê笮�奼荊?
GCP Ground Control Point(地面控制點)文件,用於遠景數據形成圖像過程,經常用於生成圖工程—CHIPS(copenhagen image processing system)使用這些文件
GDB InterBase資料庫文件
GDM 鈴聲、口哨聲和聲音板模塊格式
GED GEDCOM 系譜數據文件,用於記錄和交換系譜數據的流行格式;圖形環境文檔籜?
GEM GEM元文件
GEN Ventura產生的文本文件
GetRight GetRight未完成的下載文件
GFC Patton&Patton FlowCharting 4 flowchart文件
GFI,GFX Genigraphics圖形鏈接表示文件
GHO Norton 克隆磁碟映像
GID Windows 95全局索引文件(包括幫助狀態)
GIF CompuServe點陣圖文件
GIM,GIX Genigraphics圖形鏈接介紹文件
GKH Ensoniq EPS家簇磁碟映像文件
GKS Gravis Grip Key文檔
GL 動畫格式
GNA Genigraphics圖形鏈接介紹文件
GNT 生成代碼,Micro Focus屬性格式里的可執行代碼
GNX Genigraphics圖形鏈接介紹文件
GRA Microsoft Graph文件
GRD 用於遠程視景數據產生地圖過程的格式文件,通常應用於形成地圖工程—CHIPS(copenhagen image processing system)使用這些文件
GRF Grapher(Golden Software公司)圖形文件
GRP 程序管理組
GSM Raw GSM 6.10音頻流;Raw「byte aligned(比特對齊的)」 GSM 6.10音頻流;US Robotics語音數據機
GTK Graoumftracker(老)音樂模塊(MOD)文件
GT2 Graoumftracker(新)音樂模塊(MOD)文件
GWX,GWZ Cenigraphis圖形鏈接介紹文件
GZ UNIX gzip壓縮文件
H C程序頭文件
HCM IBM HCM配置文件
HCOM 聲音工具HCOM格式
HCR IBM HCD/HCM產品配置文件
HDF 高級計算機應用程序本地中心(NCSA) geospatial Hierarchial數據格式文件
HED HighEdit文檔
HEL Microsoft Hellbender格式保存的游戲文件
HEX Macintosh BinHex2.0文件
HGL HP圖形語言繪圖文件
HH 映射文件,包括一些話題ID和在幫助文件系統中話題的映射數字—允許運行中應用程序發送給用戶合適的上下文幫助話題
HLP 幫助文件;Date CAD Windows幫助文件
HOG Lucas Arts的Dark Forces WAD文件
HPJ Visual Basic幫助工程
HPP C++程序頭文件
HQX Macintosh BinHex 4.0文件
HST 歷史文件
HT HyperTerminal(超級終端)
HTM,HTML 超文本文檔
HTT Microsoft超文本模板
HTX 擴展HTML模板
HXM Descent2 HAM文件擴展
ICA Citrix文件
ICB Targa點陣圖文件
ICC Kodak列印機格式文件
ICL 圖標庫文件
ICM 圖形顏色匹配配置文件
ICO Windows圖標
IDB MSDev中間層文件
IDD MIDI設備定義
IDF MIDI設備定義(Windows 95需要的文件)
IDQ Internet數據查詢文件
IDX Microsoft FoxPro相關資料庫索引文件;Symantec Q&A相關資料庫索引文件;Microsoft Outlook Express文件
IFF 交換格式文件;Amiga ILBM
IGES 初始圖形交換說明文件
IGF 插入系統元文件
IIF QuickBooks for Windows交換文件
ILBM 點陣圖圖形文件
IMA WinImage磁碟映像文件
IMG GEM映像
IMZ WinImage壓縮磁碟映像文件
INC 匯編語言或動態伺服器包含文件
INF 信息文件
INI 初始化文件;MWave DSP Synth的「nwsynth.ini」 GMS安裝;Cravis Ultrasound bank安裝
INP Oracle 3.0癤蛟縉詘奼鏡謀淼ピ創�?
INRS INRS遠程通信聲頻
INS InstallShield安裝腳本;X-Internet簽字文件;Ensoniq EPS字簇設備;Cell/ⅡMAC/PC抽樣設備
INT 中間代碼,當一個源程序經過語法檢查後編譯產生一個可執行代碼
IOF Findit文檔
IQY Microsoft Internet查詢文件
ISO 根據ISD 9660有關CD-ROM文件系統標准列出CD-ROM上的文件
ISP X-Internet簽字文件
IST 數字跟蹤設備文件
ISU InstallShield卸裝腳本
IT 脈沖跟蹤系統音樂模塊(MOD)文件
ITI 脈沖跟蹤系統設備
ITS 脈沖跟蹤系統抽樣,Internet文檔位置
IV Open Inventor中使用的文件格式
IVD 超過20/20微觀數據維數或變數等級文件
IVP 超過20/20的用戶子集配置文件
IVT 超過20/20表或集合數據文件
IVX 超過20/20微數據目錄文件
IW Idlewild屏幕保護程序
IWC Install Watch文檔
J62 Ricoh照相機格式
JAR Java檔案文件(一種用於applet和相關文件的壓縮文件)
JAVA Java源文件
JBF Paint Shop Pro圖像瀏覽文件
JFF,JFIF,JIF JPEG文件
JMP SAS的JMPDiscovery表格統計文件
JN1 Epic MegaGames的Jill of the Jungle數據文件
JPE,JPEG,JPG JPEG圖形文件
JS javascript源文件
JSP HTML網頁,其中包含有對一個Java servlet的參考
JTF JPEG點陣圖文件
K25 Kurzweil 2500抽樣文件
KAR 卡拉OK MIDI文件(文本+MIDI)
KDC Kodak光增強器
KEY DataCAD圖標工具條文件
KFX KoFak Group 4圖像文件
KIZ Kodak數字明信片文件
KKW RoboHELP幫助工程索引設計器中與主題無關的K開頭的所有關鍵字
KMP Korg Trinity KeyMap文件
KQP Konica照相機本地文件
KR1 Kurzweil 2000抽樣(多軟碟機)文件
KRZ Kurzweil 2000抽樣文件
KSF Korg Trinity抽樣文件
KYE Kye游戲數據
LAB Visual dBASE標簽文件
LBM Deluxe Paint點陣圖文件
LBT,LBX Microsoft FoxPro標簽文件
LDB Microsoft Access加鎖文件
LDL Corel Paradox分發庫
LEG Legacy文檔
LES Logitech娛樂系統游戲配置文件(與REC文件一樣)
LFT 3D Studio(DOS)放樣文件
LGO Paintbrush(Microsoft畫圖應用程序)的徽標文件
LHA LZH更換文件後綴
LIB 庫文件
LIN DataCAD線型文件
LIS 結構化查詢報告(SQR)程序產生的輸出文件
LLX Laplink交換代理
LNK Windows快捷方式文件
LOG [非法語句]志文件
LPD Helix Nut和Bolt文件
LRC Intel可視電話文件
LSL Corel Paradox保存的庫文件
LSP AutoLISP、CommonLISP和其他LISP語言文件
LST 列表文件
LU ThoughtWing庫單元文件
LVL Parallax Software的 Miner Descent/D2 Level擴展
LWLO Lightwave分層對象文件
LWOB Lightwave對象文件
LWP Lotus WordPro 96/97文件
LWSC Lightwave視景文件
LYR DataCAD層文件
LZH LH ARC壓縮檔案
LZS Skyroads數據文件
M1V MPEG相關文件(MIME「mpeg」類型)
M3D Corel Motion 3D動畫文件
M3U MPEG URL(MIME聲音文件)
MAC MacPaint圖像文件
MAD Microsoft Access模塊文件
MAF Microsoft Access表單文件
MAG 在一些[非法語句]本文件中發現的圖形文件格式
MAGIC 魔力郵件監視器配置文件
MAK Visual Basil或Microsoft Visual C++工程文件
MAM Microsoft Access宏
MAN UNIX手冊頁輸出
MAP 映射文件;Duke Nukem 3D WAD游戲文件
MAQ Microsoft Access查詢文件
MAR Microsoft Access報表文件
MAS Lotus Freelance Graphics Smart Master文件
MAT Microsoft Access表;3D Studio MAX材料庫
MAUD MAUD抽樣格式
MAX Kinetx的3DStudio MAX文件;該格式用於一個3D場景文件;Paperport文件;OrCAD設計文件
MAZ Hover迷路數據;Division的dVS/dVISE使用的文件格式
MB1 Apogee Monster Bash數據文件
MBOX Berkeley Unix郵箱格式
MBX Microsoft Outlook保存email格式;Eudora郵箱
MCC Dailerl0呼叫卡
MCP Metrowerks CodeWarrior工程文件
MCR DataCAD鍵盤宏文件
MCW Microsoft Word的Macintosh文檔
MDA Microsoft Access內抽入器;Microsoft Access 2.0版及其後續版本的工作組事件
MDB Microsoft Access資料庫
MDE Microsoft Access MDE文件
MDF Alcohol的文件格式
MDL 數字跟蹤器音樂模塊(MOD)文件;Quake模 塊文件
MDN Microsoft Access空資料庫模板
MDS Alcohol的文件格式
MDW Microsoft Access工作組文件
MDZ Microsoft Access向導模板文件
MED 音樂編輯器,OctaMED音樂模塊(MOD)文件
MER 電子表格/資料庫數據交換格式;FileMaker、Excel及其他軟體能識別
MET 表示管理器元文件
MFG Pro/ENGINEER製造文件
MGF 在材料與幾何學里的文件格式
MHTM,MHTML MHTML文檔(MIME)
MI 雜項
MIC Microsoft Image Composer文件
MID MIDI音樂
MIF Adobe FramMaker交換格式
MIFF 與機器無關格式文件
MIM,MIME,MME Internet郵件擴展格式的多用途文件,經常作為發送e-mail時在AOL里附件而創建的文件;在一個多區MIM文件里的文件能用WinZip或其他類似程序打開
MLI 3D Studio的材料庫格式文件
MMF Meal Master格式;一個處方類格式;Microsoft郵件文件
MMG 超過20/20表或集會數據文件
MMM Microsoft多媒體電影
MMP Mindmapor Mind Manager文件
MN2 Descent2任務文件
MND,MNI Mandelbort for Windows
MNG 多映像網路圖形
MNT,MNX Microsoft FoxPro菜單文件
MNU Visual dBASE菜單文件;Intertel Systems Interact菜單文件
MOD Fast Tracker、Star Trekker、Noise Tracker(等等)音樂模塊文件;Microsoft多計劃電子表格;Amiga/PC磁軌文件
MOV QuickTime for Windows電影
MP2 第二層MPEG音頻文件
MP3 第三層MPEG音頻文件
MPA MPEG相關文件,MIME「mpeg類型」
MPE,MPEG,MPG MPEG動畫文件
MPP Microsoft工程文件;CAD繪圖文件格式
MPR Microsoft FoxPro菜單(已編譯)
MRI MRI掃描文件
MSA 魔術陰影檔案
MSDL Manchester的場景描述語言
MSG Microsoft郵件消息
MSI Windows 安裝器包
MSN Microsoft網路文檔;Descent Mission文件
MSP Microsoft Paint(畫圖)點陣圖文件;Windows Installer路徑文件
MST Windows 安裝器傳輸文件
MTM Multi 跟蹤器音樂模塊(MOD)文件
MUL Ultima在線
MUS 音樂
MUS10 Mus10聲音
MVB Microsoft多媒體查看器文件
MWP Lotus WordPro 97 Smart Master文件
NAN Nanoscope文件(Raw Grayscale)
NAP NAP元文件
D. 聯想筆記本的軟體商店可以下載什麼c語言編譯程序
現在的C語言編譯器,都是需要金錢的,我們看到的,現在免費的都是人們破解版,不是正規的
E. 你怎麼在電腦上編程,而不用任何軟體
40267">
我從編程寫軟體學到的 7 件事,其實學習編程不難,寫軟體也不你那,就看我們如何看待了!
我正在一點一點的從一個工程師轉型為管理者。別弄錯了,雖然我在轉管理,但我仍然在每天寫代碼。不過我發現自己在會議和電話中會花越來越多的時間去分析討論,試著去組織團隊,並且為全局部署而不是具體戰術而煩惱。
當然這不是一件壞事。高層次的決策往往比單個的類和函數的細節更有影響。讓一個團隊更有效率,比僅僅讓自己更有生產力有更高的杠桿作用。但我想我已經從我多年來的編程中吸取到了一些經驗。我希望大部分經驗可以應用於管理方面。
1、沒有規定(rules),只有公案(koans)
譯註:公案(Koan)有五種重要的涵義: 作悟禪的工具; 作考驗的方法; 作權威的法范; 作印證的符信; 作究竟的指點。)
舉個例子:DRY,意思是「不要重復你自己」。作為軟體的基本規則這很好理解,因為很多話可以證明:「我做 X 是因為它沒有重復。」這說得通,不是嗎?如果你有兩個或者兩個以上部分的代碼在做相同的事情,說明你正在浪費。而且如果當你需要改變它們其中一個的時候,你可能也需要改變其他的,並且你很可能會忘記這么做。當它們不同步時,你會得到一個怪異的 bug。因此很顯然你不能重復你自己。
然而,在使用了幾年之後,人們開始懷疑它的普遍適用性。假如你的兩個方法中包含相同的代碼塊,所以你將其拿出來形成一個單獨的函數。通常那些方法會開始朝不同的方向發展…接著你發現自己要在函數中加入更多的參數,很可能為結果立了更多 flags……然後下一個接手的程序員會因為分離出來的函數以及它所帶的特定的參數和結果,而出現認知負載。你會意識到如果當初允許自己重復,並讓兩塊代碼自然的發展為不同的個體,你生成的代碼將會更簡單直觀。
這意味著 DRY 不好嗎?當然不是!通常在合適的環境下使用 DRY 是正確的…好吧,也許。我個人的經驗是:「重復一次是可以的,超過一次就不太好了…當然這取決於所處的環境。」因為所有事都取決於環境。DRY 的目的並不是為了 DRY。如果你迷信於此,小孩兒,那你還有太多要學。DRY 的目的為了讓你了解 DRY。那當然不是規定,僅僅是公案。
(讓我重申一遍:我在討論的是軟體。在我的經驗中,硬體規定的確更傾向於是我們所理解中的規定。這就是我為什麼要從電氣工程轉到軟體的原因)
細想我最喜歡的兩個計算機科學「定律」。第一:「計算機科學中沒有一個問題是不能通過添加另一層抽象來解決的!」這句話完全正確嗎?當然不。這在現象學上是正確的嗎?實際上,的確是。這是否意味著抽象是解決任何問題的正確途徑?不,不是。它是一個公案,可以啟發思想。
還有我歷來最喜歡的:「第一優化定律:不要這樣做。第二優化定律(對專家而言):不要又這樣做。」這顯然是一個公案,卻稱自己為法規。是時候讓你的代碼運行的更快嗎?不。是時候讓你的代碼運行的更快嗎?還不是。什麼意思?意思是要考慮到時間,復雜性,認知負載,具體結果,生活意義,人類存在的意義。並且三思而後行,小孩兒。但不要花太長時間,我們還有工作要做。
2、要想得到他人的信任,先信任他人
這不僅僅針對於管理者。雖然它對管理者尤其重要。信任是你真正擁有的唯一價值。如果你的公正、判斷、理解、誠實不被信任。接下來你組織的成員將把你視為禍害並繞著你走。然而,如果你是個有能力但不被信賴的開發者,你可能還有一些價值。雖然你在每個決定上做的努力都會被大大消減。
不過更重要的一點是:一個團隊的成員需要互相信任。當 Natascia 說:「我來解決那個問題單(ticket)」,你必須相信她會去做。當你說:「Peter 能在截止時間前完成的。」,你必須相信那會實現。當某人說,「我有一個瘋狂的點子」,他們必須信任他們會被尊重和認真對待,盡管那點子的確很瘋狂。
你是如何建立和得到信任的?答案很簡單:你去信任他人。你相信那個說他可以學會這個新庫並且在周一前會整合完的人。你相信那個說他需要提前離開,因為家裡有事而會錯過明天工作的人。你相信那些想在截止日期前一個月休假的人,因為他們覺得自己已經開始筋疲力盡了。你相信說想要解決難題的初級程序員。
但你不總是正確的。有些時候人在工作上存了壞心。你需要揭露這些人的真面目,讓他們盡早離開。有時候你要信任那些真心想成功的人,雖然他們會失敗。但違反常識的是,長遠來看這通常是個勝利。因為那些人會記住你的信任,他們會盡一切努力來報答你。
3、簡單比優雅重要的多
我也喜歡緊湊優雅的代碼。我喜歡靈活的框架,有如此多抽象層次隨時待命,無論拋出什麼改變的需求都能解決。我喜歡使用位向量、位位移、略微復雜的數據結構和不太流行且古怪的小語言特性,但在特定環境下十分實用。
然而你並不只是為了你自己寫代碼。即使它只是個「原型」。(我已經記不清我有多少「原型」在多次對層操作和潤色的過程中出現問題。)而且你不僅僅是為了解決當前的問題編寫它。你正在為了下一個接手的開發者可以使用它來解決下一個問題而編寫。把你寫到那五行代碼擴充為十行可以增強其可讀性,你知道嗎,也許擴展為十五行效果會更好。
你可以提前嘗試並用靈活且充滿抽象的框架解決它們。但是也許預言不是你的強項,也許你關於下一個問題的概念的想法完全是錯誤的。也許僅僅編寫足夠簡單的代碼才是最佳選擇。有一個命名約定和一個編碼風格,讓它讀起來像英語一樣。也許不是添加一個類,而是下一個開發者在試圖跟隨你的控制流程時必須保持另一個文件的開放。你應該用愚蠢的方式,不雅的方式,簡單的方式。
4、動力比大多數事都重要
我們都曾見過這種情況。一周里每個人都在檢查代碼,構建顯而易見的雛形,每天不斷增加特性,測試覆蓋率越來越高。疏忽也隨著生產的想法和解決方案而出現。不知怎麼的下一周所有事都變得緩慢起來。關於 A 的決定,會影響到 B、C和 D。當人們可以運行D、E 和 F 時,它們不是邏輯序列發展上的一部分。於是需要做更多的假設,認知負載加重,你不得不模擬出一堆東西來寫出非模仿代碼。一些人需要做這個決定。
或許不是決定會癱瘓,是你上周所做的一切都在錯誤的基礎上,是一個「地震多發區」的技術負債。你需要停止所有事返回並重構它。而且你必須馬上開始,因為等的時間越長,事情會變得越糟糕。沒人想看到這種事發生 。但他們寧願現在面對也比下個月知道的好。讓暴風雨來的更猛烈些吧。
也許上周每個人都拼勁全力,現在實在撐不住了。你知道該怎樣嗎?得讓他們休息一下,每個人,休息一整天。我保證,這會給你接下來的「長跑」節省時間。
I我們很難定義、衡量以及說明動力。但它在軟體開發中是真實存在的東西。而且它的缺失會成為造成首要影響,導致我們需要去解決很多根本問題。別忽略它,也別期望或假裝它會神奇地回來。察覺警報並迅速採取行動。
5、與和你互補而不是像你一樣的人一起工作
每當我看到人們根據「文化契合度」來找人的時候,我就會拚命翻白眼。你知道大多單一栽培會發生什麼嗎?他們遭遇了他們不知如何解決的病原體,然後嗝屁死翹翹了。
你不會希望你的所有開發者、設計者、 QA人員、產品人員、銷售人員和執行官是彼此的克隆人。你肯定不想。每個人都有自己的長處和短處、優點和缺點。你想要僱傭的是他們的長處,讓其他人的長處彌補他們的短處。
比如說我,寫代碼非常快,擅於溝通,讀寫文章都奇快。我在任何時候都能熟悉很多編程語言和框架。我理解東西透徹且迅速,有豐富的經驗。然而我還是一個在特定領域、框架和語言缺乏深刻專研、精通掌握的全才。我是一個真正從別人身上獲益的建築師,跟蹤所有需要,在骨骼構建好之後添加肉體和潤色。我還是個 UX 盲(等一下,你說那些還沒對齊?),這一直被當作同事之間的玩笑。
像我這樣的人非常難找到也是及其被需要的。但一個由我和九個像我一樣的克隆人組成的公司是從一開始就註定要失敗的。唔,我們會把很多事情做好,但只需要一個集中的盲點,一個災難性的空隙就足以毀滅公司。大多數人承認有些事情他們做不好,另一些人可能需要照應。這些人往往是尋找「文化契合度」的人,並試圖僱傭和他們一樣的人。真令人哭笑不得。
6、任何決定都比沒決定強
別猶豫,當你拿不準主意時,去做就好了。當然,這可能不適用在生產代碼的時候。但它可以應用於除此之外在軟體開發里的任何方面。我們在歷史上發展最快的行業里工作。我們生活在以指數形式發展的世界裡。時間不等人,別浪費它。
這與低級決策的高級討論一樣真實。在高水平的討論里,比如「我們應該實現特性 A 還會說 B?我們要用哪種方式實現呢,X 還是 Y?「,常常會產生這樣的對話,」讓我們先跳過這個…下周再對它進行討論…「,或者更陰險的,」讓我們先研究一下其他人做了什麼再來討論一次。「這樣的問題極少情況下會有正確答案。大多時候,像這么說才是正確的,」我會在今天之前決定嘗試哪一個,這樣我們就可以明天開始行動了。
甚至 A 選項基本上是錯誤選擇,開始進行 A 大概也比啥都不做強。這和直覺是相悖的,但它通常也是正確的。以實際上手的方式去理解 A 的本質是一個更好的辦法,這個道理始終是正確的。這樣的理解可能會引導你做出更好的決定。
對於低級決策,那就更應該如此了。「規范沒有說明我們應該如何處理錯誤條件 X,或者錯誤信息應該是什麼。」(規范似乎是為一個有抱負的烏托邦寫的,在這種烏托邦中,錯誤條件和獨角獸一樣罕見。)「我知道,我只是想插一句,回去問問他們在這種情況下想做什麼!」
這非常誘人。如果你這么做,沒人能指責你哪裡做錯了。但這么做是錯誤的。寧願繼續自己做決定,盡管有些魯莽,也不要什麼都不做等著問別人。讓它們在你做已經寫好的程序和你學到的教訓里迭代,雖然你知道這並不完美,也好過從頭開始錯誤認知。它們和項目將會變得更好。快速嘗試,快速改變方向。
7、保持謙虛,但要自信
你不需要所有的答案。甚至是我也不得不勉強承認我不會有全部的答案。可惡,我甚至連它們的大多數也沒有,不過我有自信,只要給我足夠的時間和精力,我能弄清楚大部分。並且你也可以。
我們無法都成為 Jeff Dean(谷歌大牛)、中本聰(比特幣創始人) 或是 Margaret Hamilton(登月計劃中的女程序員)。我們在一個充斥著真正的天才和自稱天才的地方工作。沒人知道所有的事情,每個人都敏銳地意識到他們所不知道的一切。幸運的是,大多數情況下,我們不是科學家。我們的工作不是去尋找新突破。我們的工作是實踐他人的發現,使東西運轉,希望服務於人們真正想要的東西。也許你永遠不會發明任何東西,像是布隆過濾器或默克爾樹。不過大多與你共事的人們也不會。而且這不是重點,重點是使用布隆過濾器和默克爾樹,亦或是在它們之上建個抽象層,來實際的完成它們。
所以假設你懂的會比在座的人都多是錯誤的,就算你覺得他們違背直覺的想法很瘋狂,他們的語言選擇很糟糕。假設人家比你懂的多也是錯誤的,即使真是那樣,也沒關系。世界上多的是聰明人因為一些不可思議的原因什麼實際東西也沒做出來。(開個廉價的玩笑╮(╯▽╰)╭:這就是為什麼我們有學術界的原因。)
如果你真的做出了一些東西,在面對那些令人眼花繚亂的理論知識,或是和你相似甚至比你做的更糟糕的人時大可不必謙虛。在一天結束之時,正是那些在戰壕中的開發者——構建、測試和開發了代碼的人,真正做了事情。話說那些發現自己遠離戰壕的人,那些沒有和你一起並肩作戰的逃兵,你有權利鄙視他們。並且向你的夥伴致敬,而不是上司。
原文標題:做好這7件事 讓你學編程寫軟體不在難
原文鏈接:http://www.epx365.cn/peixun/software/201840267.html