導航:首頁 > 編程語言 > php析構函數作用

php析構函數作用

發布時間:2023-05-29 07:27:15

① 什麼時候對象的所有引用都被刪除 - 技術問答

對象不需要的時候調用unset()注銷對余昌悉告象引用,所有的對象引用被銷毀對象就被銷毀了,所謂引用就是豎陸扒賦值給了誰
$a= new moqi();
$b=$a;
$c=$b;

那麼$b和$c都是對象$a的引用

php構造函數的PHP 5 構造函數和析構函數

void __construct ([mixed $args [, $... ]])
PHP 5 允行開發者在一個類中定義一個方法作為構造函數。具有構造函數的類會在每次創建對象時先調用此方法,所以非常適合在使用對象之前做一些初始化工作。
注意: 如果子類中定義了構造函數則不會暗中調用其父類的構造函數。要執行父類的構造函數,需要在子類的構造函數中調用 parent::__construct()。 使用新標準的構造函數: <?phpclassBaseClass{function__construct(){printInBaseClassconstructor ;}}classSubClassextendsBaseClass{function__construct(){parent::__construct();printInSubClassconstructor ;}}$obj=newBaseClass();$obj=newSubClass();?>為了實現向後兼容性,如果 PHP 5 在類中找不到 __construct() 函數,它就會嘗試尋找舊式的構造函數,也就是和類同名的函數。因此唯一會產生兼容性問題的情況是:類中已有一個名為 __construct() 的方法,但它卻又不是構造函數。 void __destruct (void)
PHP 5 引入了析構函數的概念,這類似於其它面向對象的語言,如 C++。析構函數會在到某個對象的所有引用都被刪除或者當對象被顯式銷毀時執行。
析構函數例子: <?phpclassMyDestructableClass{function__construct(){printInconstructor ;$this->name=MyDestructableClass;}function__destruct(){printDestroying.$this->name. ;}}$obj=newMyDestructableClass();?>注意: 和構造函數一樣,父類的析構函數不會被引擎暗中調用。要執行父類的析構函數,必須在子類的析構函數體中顯式調用 parent::__destruct()。 析構函數在腳本關閉時調用,此時所有的頭信息已經發出。 試圖在析構函數中拋出一個異常會導致致命錯誤。

③ 請問PHP構造函數的含義

php的兩大oop使用型函數:構造函數(__construct)和析構函數(__destruct );

構造函數:當在某一頁面寫了眾多函數,其中就包括構造函數,當你調用其中任一函數時,都將在調用此函數前先調用構造函數,如:你把鏈接資料庫代碼寫到構造函數裡面,然後在使用增刪改查時,就不用再寫連接s資料庫語句了,因為有構造函數在,你就只用寫增刪改查類sql語句就可以了。
析構函數:和構造函數相反,在同一頁面內,有眾多函數,其中有析構函數,當你調用了某一函數之後,會自動執行析構函數,比如說你的增刪改查用完了,是不是要關閉資料庫連接來釋放內存?析構函數就是這樣用的。

④ PHP里$_SERVER['HTTP_HOST']和$_SERVER['PHP_SELF']區別

兩者的區別在於含義不同:

假如命令行的地址是:xxx

那麼:$_SERVER['HTTP_HOST']=='www..com'$_SERVER['PHP_SELF']=='/index.php'所以前者是主機地址,後者是腳本文件的絕對路徑。

(4)php析構函數作用擴展閱讀:

1、新對象模式

*構造函數和析構函數* 對象的引用 * 對象的克隆 * 對象中的私有、公共及受保護模式 * 介面 (Interfaces)

* 抽象類 * __call * __set 和 __get * 靜態成員

2、構造函數和析構函數

在 PHP4 中,當函數與對象同名時,這個函數將成為該對象的構造函數,並且在 PHP4 中沒有析構函數的概念。

在 PHP5 中,構造函數被統一命名為 __construct,並且引入了析構函數的概念,被統一命名為 __destruct。

3、對象的引用

在PHP4中,傳遞變數給一個函數或方法,實際是把這個變數做了一次復制,也就意味著你傳給函數或方法的是這個變數的一個副本,除非你使用了引用符號「&;」 來聲明是要做一個引用,而不是一個 Copy。在 PHP5中,對象總是以引用的形式存在的,對象中的賦值操作同樣也都是一個引用操作。

4、對象的克隆

當一個對象始終以引用的形式來被調用時,如果我想得到該對象的一個副本,該怎麼辦呢?PHP5 提供了一個新的功能,就是對象的克隆,語法為 __clone。

5、抽象類

抽象類不能被實例化。

抽象類與其它類一樣,允許定義變數及方法。

抽象類同樣可以定義一個抽象的方法,抽象類的方法不會被執行,不過將有可能會在其派生類中執行。

6、__call

PHP5 的對象新增了一個專用方法 __call(),這個方法用來監視一個對象中的其它方法。如果你試著調用一個對象中不存在的方法,__call 方法將會被自動調用。

參考資料:網路——PHP

⑤ 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
字元串運算符:
. 連接兩個字元串

⑥ PHP必須要寫析構函數嗎

不是必須孝臘裂的,而且如果對象銷毀之前不需要進行額外的操作,官方是鼓勵不寫的,因局跡為寫了巧閉不進行任何操作,反而會造成資源浪費。

⑦ 析構函數為什麼在一創建對象時,就被自動執行了呢

人家不是廢話,你程序結束了,對象自動銷芹悄核毀,於是調用了你的析構函數,你可以運培在$aaa = new aaa();後面加些輸出操作,看看是嫌掘不是aaa是不是剛創建就銷毀了

⑧ php代碼 訪問者IP是中國的就跳轉到中文頁面,不是中國的就跳轉到英文頁面

可能原來伺服器有讀取ip所在地的介面吧,可能你那個判斷不好用了

放到index.php中
<?php
include_once 'class_iplocation.php';
$ip='222.132.78.170';
$iplo= new IpLocation();

$a_provinces=Array (
'0' => '河北',
'1' =>'海南',
'2' => '貴州',
'3' => '廣西',
'4' => '廣東',
'5' => '甘肅',
'6' => '福建',
'7' => '北京',
'8' => '安徽',
'9' => '河南',
'10' => '黑龍江',
'11' => '湖北',
'12' => '湖南',
'13' => '吉林',
'14' => '江蘇',
'15' => '江西',
'16' => '遼寧',
'17' => '內蒙古',
'18' => '寧夏',
'19' => '青海',
'20' => '山東',
'21' => '山西',
'22' => '陝西',
'23' => '上海',
'24' => '四川',
'25' => '天津',
'26' => '西藏',
'27' => '新疆',
'28' => '雲南',
'29' => '浙江',
'30' => '重慶',
'31' => '香港',
'32' => '澳門',
'33' => '台灣'
);
$china='';
$strs=$iplo->getlocation($ip);
//print_r($strs);
//echo $strs['country'];
foreach ($a_provinces as $ci)
{
$pos = strpos($strs['country'],$ci);
if ($pos !== false ) {
echo $ci;
$china=$ci;
break;
}
}
echo $china;
if($china!='')
$home='chinese/index.php';
else
$home='english/index.php';

echo "<script language='javascript'>window.location.href='".$home."';</script>";
?>

說明:1.qqwry.dat在qq文件夾下搜就有哦。這三個文件應該放於同一目錄
2.類文件:class_iplocation.php
<?php
/**
* IP 地理位置查詢類
*
* @author 馬秉堯
* @version 1.5
* @right 2005 CoolCode.CN
*/
class IpLocation {
/**
* QQWry.Dat文件指針
*
* @var resource
*/
var $fp;

/**
* 第一條IP記錄的偏移地址
*
* @var int
*/
var $firstip;

/**
* 最後一條IP記錄的偏移地址
*
* @var int
*/
var $lastip;

/**
* IP記錄的總條數(不包含版本信息記錄)
*
* @var int
*/
var $totalip;

/**
* 返回讀取的長整型數
*
* @access private
* @return int
*/
function getlong() {
//將讀取的little-endian編碼的4個位元組轉化為長整型數
$result = unpack('Vlong', fread($this->fp, 4));
return $result['long'];
}

/**
* 返回讀取的3個位元組的長整型數
*
* @access private
* @return int
*/
function getlong3() {
//將讀取的little-endian編碼的3個位元組轉化為長整型數
$result = unpack('Vlong', fread($this->fp, 3).chr(0));
return $result['long'];
}

/**
* 返回壓縮後可進行比較的IP地址
*
* @access private
* @param string $ip
* @return string
*/
function packip($ip) {
// 將IP地址轉化為長整型數,如果在PHP5中,IP地址錯誤,則返回False,
// 這時intval將Flase轉化為整數-1,之後壓縮成big-endian編碼的字元串
return pack('N', intval(ip2long($ip)));
}

/**
* 返回讀取的字元串
*
* @access private
* @param string $data
* @return string
*/
function getstring($data = "") {
$char = fread($this->fp, 1);
while (ord($char) > 0) { // 字元串按照C格式保存,以\0結束
$data .= $char; // 將讀取的字元連接到給定字元串之後
$char = fread($this->fp, 1);
}
return $data;
}

/**
* 返回地區信息
*
* @access private
* @return string
*/
function getarea() {
$byte = fread($this->fp, 1); // 標志位元組
switch (ord($byte)) {
case 0: // 沒有區域信息
$area = "";
break;
case 1:
case 2: // 標志位元組為1或2,表示區域信息被重定向
fseek($this->fp, $this->getlong3());
$area = $this->getstring();
break;
default: // 否則,表示區域信息沒有被重定向
$area = $this->getstring($byte);
break;
}
return $area;
}

/**
* 根據所給 IP 地址或域名返回所在地區信息
*
* @access public
* @param string $ip
* @return array
*/
function getlocation($ip) {
if (!$this->fp) return null; // 如果數據文件沒有被正確打開,則直接返回空
$location['ip'] = gethostbyname($ip); // 將輸入的域名轉化為IP地址
$ip = $this->packip($location['ip']); // 將輸入的IP地址轉化為可比較的IP地址
// 不合法的IP地址會被轉化為255.255.255.255
// 對分搜索
$l = 0; // 搜索的下邊界
$u = $this->totalip; // 搜索的上邊界
$findip = $this->lastip; // 如果沒有找到就返回最後一條IP記錄(QQWry.Dat的版本信息)
while ($l <= $u) { // 當上邊界小於下邊界時,查找失敗
$i = floor(($l + $u) / 2); // 計算近似中間記錄
fseek($this->fp, $this->firstip + $i * 7);
$beginip = strrev(fread($this->fp, 4)); // 獲取中間記錄的開始IP地址
// strrev函數在這里的作用是將little-endian的壓縮IP地址轉化為big-endian的格式
// 以便用於比較,後面相同。
if ($ip < $beginip) { // 用戶的IP小於中間記錄的開始IP地址時
$u = $i - 1; // 將搜索的上邊界修改為中間記錄減一
}
else {
fseek($this->fp, $this->getlong3());
$endip = strrev(fread($this->fp, 4)); // 獲取中間記錄的結束IP地址
if ($ip > $endip) { // 用戶的IP大於中間記錄的結束IP地址時
$l = $i + 1; // 將搜索的下邊界修改為中間記錄加一
}
else { // 用戶的IP在中間記錄的IP范圍內時
$findip = $this->firstip + $i * 7;
break; // 則表示找到結果,退出循環
}
}
}

//獲取查找到的IP地理位置信息
fseek($this->fp, $findip);
$location['beginip'] = long2ip($this->getlong()); // 用戶IP所在范圍的開始地址
$offset = $this->getlong3();
fseek($this->fp, $offset);
$location['endip'] = long2ip($this->getlong()); // 用戶IP所在范圍的結束地址
$byte = fread($this->fp, 1); // 標志位元組
switch (ord($byte)) {
case 1: // 標志位元組為1,表示國家和區域信息都被同時重定向
$countryOffset = $this->getlong3(); // 重定向地址
fseek($this->fp, $countryOffset);
$byte = fread($this->fp, 1); // 標志位元組
switch (ord($byte)) {
case 2: // 標志位元組為2,表示國家信息又被重定向
fseek($this->fp, $this->getlong3());
$location['country'] = $this->getstring();
fseek($this->fp, $countryOffset + 4);
$location['area'] = $this->getarea();
break;
default: // 否則,表示國家信息沒有被重定向
$location['country'] = $this->getstring($byte);
$location['area'] = $this->getarea();
break;
}
break;
case 2: // 標志位元組為2,表示國家信息被重定向
fseek($this->fp, $this->getlong3());
$location['country'] = $this->getstring();
fseek($this->fp, $offset + 8);
$location['area'] = $this->getarea();
break;
default: // 否則,表示國家信息沒有被重定向
$location['country'] = $this->getstring($byte);
$location['area'] = $this->getarea();
break;
}
if ($location['country'] == " CZ88.NET") { // CZ88.NET表示沒有有效信息
$location['country'] = "未知";
}
if ($location['area'] == " CZ88.NET") {
$location['area'] = "";
}
return $location;
}

/**
* 構造函數,打開 QQWry.Dat 文件並初始化類中的信息
*
* @param string $filename
* @return IpLocation
*/
function IpLocation($filename = "QQWry.Dat") {
$this->fp = 0;
if (($this->fp = @fopen($filename, 'rb')) !== false) {
$this->firstip = $this->getlong();
$this->lastip = $this->getlong();
$this->totalip = ($this->lastip - $this->firstip) / 7;
//注冊析構函數,使其在程序執行結束時執行
register_shutdown_function(array(&$this, '_IpLocation'));
}
}

/**
* 析構函數,用於在頁面執行結束後自動關閉打開的文件。
*
*/
function _IpLocation() {
if ($this->fp) {
fclose($this->fp);
}
$this->fp = 0;
}
}
?>

⑨ 函的基礎知識

函的基礎知識1

函,即信;公函即公務信件。它是上下級和平行機關或不相隸屬機關之間在商洽和聯系工作、詢問和答復問題時所使用的文體。函的特點是不受公文規定的嚴格限制,如不用正式文件頭,也可不編文件號,有時還可不擬標題,因此用起來極為簡便。

公函的用法

一、下級機關向上級機關詢問一般事宜,或上級機關答復或催辦下級機關有關事宜。

二、平行機關或不相隸屬機關之間商洽有關事宜,

三、坦備用函來通知一般事項。如通知開一般性的會議、要求下級機關報送某項材料或統計某些數字等時,也常用公函。

四、向上級機關請示較小事宜也常用函。

函件採用書寫、復印、列印、傳真等傳遞方式均可。

公文函格式

公函由首部、正文和尾部三部分組成。其各部分的格式、內容和寫法要求如下:

(一)首部。主要包括標題、主送機關兩個項目內容。

1、標題。公函的標題一般有兩種形式。一種是由發則磨文機關名稱、事由和文種構成。另一種是由事由和文種構成。

2、主送機關。即受文並辦理來函事項的機關單位,於文首頂格寫明全稱或者規范化簡稱,其後用冒號。

(二)正文。其結構一般由開頭、主體、結尾、結語等部分組成。

1、開頭。主要說明發函的緣由。一般要求概括交代發函的目的、根據、原因等內容,然後用「現將有關問題說明如下:」或「現將有關事項函復如下:」等過渡語轉入下文。復函的緣由部分,一般首先引敘來文的標題、發文字型大小,然後再交代根據,以說明發文的緣由。

2、主體。這是函的核心內容部分,主要說明致函事項。函的事項部分內容單一,一函一事,行文要直陳其事。無論是商洽工作,詢問和答復問題,還是向有關主管部門請求批准事項等,都要用簡潔得體的語言把需要告訴對方的問題、意見敘寫清楚。如果屬於復函,還要注意答復事項的針對性和明確性。

函的基礎知識2

一、公文概述

什麼是公文?公文是公務文書的簡稱,它是一級機關在行政管理過程中為處理公務而按規定格式製作的書面材料。

公文是黨組織、國家機關、企業、事業、團體、學校等在黨務活動、政務活動、技術活動和經濟活動等公務活動中的產物;公文還是宣布和傳達政策法令、指導工作、報告和商洽國家事務的一種工具。

公文具有直接生效的指導作用。這種指導作用包括命令作用、法律作用、執行作用、指示作用、宣傳作用、教育作用、交涉作用……等等。

寫作公文不能離開政策和法律,必須符合黨和政府的方針、政策和法規、法律。只有不斷提高公文寫作水平,才能不斷提高辦文質量,使公文發揮它的特殊的功用。

根據國務院辦公廳1993年11月發布的《國家行政機關公文處理辦法》規定,我國現行的國家行政機關公文分12類13種:①命令(令);②議案;③決定;④指示;⑤公告、通告;⑥通知;⑦通報;⑧報告;⑨請示; 10 批復; 11 函; 12 會議紀要。 根據中央中央辦公廳1996年5月印發的《中國共產黨機關公文處理條例》規定,我國現行的各級黨的機關公文有14種:①決議;②決定;③指示;④意見;⑤通知;⑥通報;⑦公報;⑧報告;⑨請示; 10 批復; 11 條例; 12 規定; 13 函; 14 會議紀要。

以上兩個文件是黨政機關公文制發的依據,同時也成為企事業單位、社會團體、行業等選擇通用公文文種的依據。當然一些專職機關,如軍事、外交、經濟、法律等的機構另有一些專用公文。

公文的處理程序一般包括:①收文;②分辦、批辦;③催辦;④擬稿;⑤審核、簽發;⑥編號、印發;⑦立卷(歸檔);⑧銷毀。與寫作有直接關系的是擬稿。

二、公文的格式與要素〖ht〖kh*3/4公文具有規定的格式,公文要按規定的格式寫作。這樣可孫信斗以保證公文的完整性、准確性和程序性,並且便於公文的處理,提高辦文的工作效率。

公文的格式要素一般包括:

(一)發文機關(版頭)

發文機關即公文的作者,發文機關應寫機關全稱或規范化的簡稱。同級政府、政府各部門、上級政府部門與下級政府可以聯合行文,各級政府及其部門與同級常委、軍隊、人民團體和行使行政職能的事業單位、公司也可聯合行文。幾個機關聯合行文,應將主辦機關排列在前。

版頭是發文機關的標記。目前我國使用的公文版頭有以下三種:

1、由發文機關全稱或規范化簡稱加「文件」兩字組成,以大字套紅居中,印在文件首頁上端,俗稱「大版頭」。例如,「浙江省人民政府文件」、「浙江省人事廳文件」。

2、由發文機關全稱或規范化簡稱加圓括弧標注文種名稱,俗稱「小版頭」。例如,「浙江省人民政府(通知)」、「××市教育委員會(函)」。

3、印有發文機關全稱的公函紙,作為版頭。

至於幾個機關聯合行文的,可用公文主辦機關一家版頭,也可用所有聯合行文機關的版頭。

(二)公文份號 〖ht公文份號是同一公文印製若干份時每份的順序編號,位於版頭左上角,用阿拉伯數字標識,用以掌握每份公文的流向。絕密、機密公文應標明份號。

(三)秘密等級 〖ht公文的秘密等級分為「絕密」、「機密」、「秘密」三種,由發文機關依據《中華人民共和國保守國家秘密法》及其《實施細則》、中央和國家各部、委、辦、局制訂的國家秘密及其密級具體范圍的規定等確定,標注在版頭左上角「公文份號」之下。其具體標識為「」,「」前標密級,後標保密期限。沒有標上保密期限的,絕密、機密、秘密分別可按30年、20年、xx年認定。

(四)緊急程度

緊急程度是指對公文送達和辦理速度的要求。緊急公文分為「特急」、「急」兩種,標注在版頭左上角「秘密等級」下。電報分別標注「特急」、「加急」。

(五)發文字型大小 〖ht發文字型大小是指發文機關編制的公文代號,簡稱文號。發文字型大小由發文機關代字、發文年度、發文順序號三部分組成。其中發文年度用六角括弧括入。如國務院1998年制發的第12號文件,發文字型大小為「國發〔1998〕12號」。發文字型大小位於版頭與紅線之間的正中處,用公函紙制發的,位於標題右上側。幾個機關聯合發文,一般只標明主辦機關發文字型大小。

(六)簽發人簽發人與簽署不同。簽署是某些需要以本機關行政首長名義發布的公文,由其簽名或加蓋簽名章後才能發出。簽發人則有兩種情況:一是指機關負責人在審定文稿後簽上姓名表示同意印發;二是報送上級機關的請示、報告,必須註明簽發人。這里指的是後一種情況,簽發人的姓名署於版頭紅線之上發文字型大小的右側:「簽發人:×××」。為使公文顯得對稱,發文字型大小應相應向左移位。重要的或涉及面廣的,必須由正職或主持日常工作的副職領導人簽發。

(七)標題

公文標題位於版頭下面居中的位置,通常在版頭與標題之間,用一紅線作區別標志。如一份公文沒有版頭,標題置於公函紙首端機關名稱下的紅線稍下居中位置。

公文標題由發文機關名稱、公文主題(事由)、文種三部分組成。例如,《國務院關於加強血吸蟲病防治工作的決定》,這里「國務院」是發文機關;「關於加強血吸蟲病防治工作」是事由;「決定」是文種。事由一般都用介詞「關於」和表達主要內容的片語組成介詞結構。

擬寫公文標題時,應特別注意以下幾點:

1、批轉或轉發公文的標題,一般由批轉或轉發機關名稱、被批轉或轉發的公文標題、文種三部分組成。如《國務院批轉國家土地管理局關於部分地方政府越權批地情況報告的通知》。批轉和轉發公文的標題,應杜絕出現介詞和文種的重疊,如「關於」的「關於」,「通知」的「通知」。同時應注意,除批轉法規性文件加書名號外,均不對原標題加書名號。

2、事由應簡明確切地概括公文的主要內容。例如,某市人民政府對歷年來制定的規范性文件進行清理,應予廢止的共有幾十件,發文時如將這些廢止的規范性文件的標題全部列為事由,顯然不可能,即使僅寫一個,後加「等」字,也嫌過長,但概括為「廢止部分規范性文件」,就顯得既明確又簡潔。

3、在擬寫標題時,一定要准確選定和標明文種,不能自造文種。

4、標題排列要對稱、美觀,除字數較少的一行字標題外,兩行以上的可排成寶塔形,也可排成長短一致的雙平行形或三平行形。在轉行時,不要把人名、地名、機關名稱等專用名詞乃至詞拆開。

5、公文標題中除書名號的使用有明確規定外,一般不加標點符號。標題過長或中間需停頓的,可用空格或換行的方式表述。例如:

國務院關於依靠科技振興農業

(八)主送機關

加強農業科技成果推廣工作的決定

主送機關是發文機關要求對公文予以辦理或答復的對方機關。除了直接面向社會發布的公文之外,公文一般均應在正文之前標題左下方頂格書寫主送機關的名稱。

確定主送機關應注意:

1、政府各部門應根據本級政府授權和職權規定,方可對下一級人民政府直接行文。

2、請示的公文,應堅持主送一個機關的原則,不能多頭主送;除特殊情況外,不得越級請示。受雙重領導的機關向上請示,應根據內容寫明主送機關和抄送機關,由主送機關負責答復。除領導直接交辦的事項外,請示不得直接送領導者個人。

3、批復下級請示,只能主送原請示機關(單位),對相關機關(單位),用抄送。

4、普發公文,主送機關應寫規范化統稱,如××省人民政府普發文件,主送機關寫為「各市、縣人民政府,各地區行政公署,省政府直屬各單位」。

(九)正文

正文是公文的主體,是反映公文具體內容的部分。正文緊接主送機關之後,提行空兩格書寫。(寫法見後)

(十)附件

附件是根據正文的需要附加的公文或材料,用以對正文作補充說明或提供參考資料。附件附於正文之後。

(十一)印章

印章是機關權力的象徵。公文加印,是制文機關確認公文效力的憑證。印章蓋於公文右下端落款處,上不壓正文,下要騎年蓋月。印章要清楚、端正。聯合上報的非法規類公文,由主報機關加蓋印章,但在首頁要註明會簽機關的簽發人姓名。聯合下發的公文,都應加蓋印章。以行政首長名義行文的公文,前具職務,後蓋簽名章。 黨的文件,有特定版頭的普發性文件不加蓋發文機關印章。這是與國家行政機關公文的一大不同。

(十二)成文時間

一般就是公文的簽發日期,標注於正文右下方。聯合行文的成文時間,以最後簽發機關領導人的簽發時間為准。會議討論通過的公文,應以會議通過的日期為准,並寫上會議名稱及屆次,以圓括弧括入,標注於公文標題之下。

(十三)附註 〖ht附註用以說明在公文其它區域不便說明的各種事項。如需要加以解釋的名詞術語,或用於表示公文的閱讀范圍、使用方法等內容,標注於落款下另起一行空兩格位置。其中閱讀范圍是對閱讀對象的規定,還應用六角括弧括入,如〔發至省軍級〕、〔發至縣團級〕等。

(十四)主題詞 〖ht主題詞是由對這一公文內容所述及的主題用規范的詞加文種組成,以便日後按公文的主題和文種進行檢索。制訂公文主題詞表,是為准確選用表中的詞目提供方便,防止隨意性。上報的公文,應標註上級機關公文主題詞表中所規定的主題詞。一件公文的主題詞至少用兩個,一般不超過七個。例如,《國務院關於深入開展企業扭虧增盈工作的通知》這一公文,主題詞就有「企業」、「經營」、「效益」、「通知」四個。從這里也可歸納出,主題詞必須正確無誤地反映出公文的內容特徵和歸屬類別,要有層次性,並且不要與標題混同。

(十五)抄送機關

民工抄送機關是指雖然不主辦,但應該了解這件公文內容的有關機關。抄送機關名稱應寫在「主題詞」後公文尾部的兩條等長平行細實線內。

(十六)印發機關和時間

印發機關,為發文機關的辦公部門;印發時間,一般為印刷時間,放在抄送機關細實線下。

以上的公文格式要素在一份公文中要根據規定,合理安排,以示公文的嚴肅性。隨著辦公自動化的逐步實現,格式要素和編排更為嚴格規范,同時還將新增一些格式構成要素。

三、公文正文的'寫作方法

草擬公文正文必須符合以下要求:

(一)符合國家的法律、法規、規章,符合黨和國家的方針、政策及有關規定。如提出新的政策規定,就要切實可行,並需另紙加以說明。

(二)情況確實,觀點明確,條理清楚,層次分明,文字精練,書寫工整,標點准確,篇幅力求簡短。

(三)人名、地名、數字、引文准確。時間應寫具體的年月日,如「1994年」不能寫成「94年」。

(四)公文中的數字,在堅持同一公文中保持數字使用前後一致的前提下,除成文時間、部分結構層次序數和詞、片語、慣用語、縮略語、具有修辭色彩語句中作為詞素的數字必須使用漢字外,都要使用阿拉伯數字。

(五)結構層次序數,依次為「一」、「(一)」、「1」、「(1)」。

(六)公文中應使用國家法定計量單位。

(七)引用公文,應先引標題,後引發文字型大小,並加圓括弧。

(八)用詞准確、規范。使用簡稱時,一般應先用全稱,並註明簡稱。

(九)請示的公文應一文一事,報告中不得夾帶請示事項。

公文正文的寫法主要有兩條: 第一、通過敘述、說理表明目的。

公文的行文分上行文、平行文、下行文三種。不管是哪一種,公文的正文一般是分敘事、說理、目的(或結論)三個方面來寫的。敘事是擺事實,說理是講道理,目的(或結論)是指要求對方做的事,或是對某一事項所作的結論。應該通過敘述,說理表明目的。具體來說:

(一)向上級機關寫請示性的公文,一般先敘述情況,再提自己的看法,最後提出要求,請上級機關審批。

(二)寫陳述性的公文,一般是先陳述情況,再寫做法,最後請領導機關或請上級對下一步做法給予指示。

(三)向平級機關寫商洽性的公文,常常是先提出因為什麼事情,再根據什麼規定,最後請示協助解決所要解決的問題。

(四)向下級機關發布指示性的公文,通常是先寫根據什麼情況,再提應該怎樣解決,最後提出具體辦法,要求下級貫徹執行。

(五)寫復文(對下級請示的公文的批復),一般先根據來文所要求解決的事項,再寫明審核的意見,最後要求下級按批復執行。

通過敘事、說理來表明目的,就是要深入調查,真正掌握情況,進行分析、研究,使理由充足、觀點正確,提出的目的既考慮到實際的需要,也考慮到可能性。因此,材料必須真實可靠,論據確鑿,說理符合政策、方針,又有的放矢,實事求是。這樣,公文的目的就既明確又具體。

第二、文字表達簡明、確切、條理清楚。

簡明,是指簡潔、明確。公文除綜合性報告外,採取的是一文一事制。寫作時,應反復地、認真地壓縮文字,去掉可有可無的空話。較長的公文也應「開門見山」。同時,公文比一般文章對明確的要求更為嚴格。它的用語以語體文為原則,力求通俗,能說明問題。不準使用自造的簡體字。它的語言必須符合語法,還要正確地使用標點符號。 確切,是指准確、貼切。公文必須符合準確性的原則,運用概念、判斷、推理要合乎邏輯。表達上既重視內容的正確性,也不忽視形式的准確性。從內容到形式,從篇章結構到用詞造句,都要與主題高度均衡、統一。

條理清楚,是指公文的布局和其它文章同樣重要。一切較長的公文,均應開門見山,首先提出要點,即於開端處,先用極簡要文句,說明全文的目的或結論(新聞學上稱為「導語」,亦即中國古人所謂「立片言以居要,乃一篇之警策」),喚起閱者注意,使閱者腦子里先得一個總概念,不得不繼續看下去。然後,再作必要的解釋。長的公文分為幾段時,每段亦應採取此法。一份公文有幾層意思或幾項要求時,必須注意條理,分清層次,以數目字標明段落和項目。這樣就可以使公文的正文做到綱舉目張,條理分明。

函的基礎知識3

構造函數

PHP5允行開發者在一個類中定義一個方法作為構造函數。具有構造函數的類會在每次創建對象時先調用此方法,所以非常適合在使用對象之前做一些初始化工作。

注意:

如果子類中定義了構造函數則不會暗中調用其父類的構造函數。要執行父類的構造函數,需要在子類的構造函數中調用parent::__construct()。(??和其他語言明顯不同??)

例10.8.使用新標準的構造函數

classBaseClass{

function__construct(){

print"InBaseClassconstructorn";

}

}

classSubClassextendsBaseClass{

function__construct(){

parent::__construct();

print"InSubClassconstructorn";

}

}

$obj=newBaseClass();

$obj=newSubClass();

為了實現向後兼容性,如果PHP5在類中找不到__construct()函數,它就會嘗試尋找舊式的構造函數,也就是和類同名的函數。因此唯一會產生兼容性問題的情況是:類中已有一個名為__construct()的方法,但它卻又不是構造函數。

析構函數

PHP5引入了析構函數的概念,這類似於其它面向對象的語言,如C++。析構函數會在到某個對象的所有引用都被刪除或者當對象被顯式銷毀時執行。

例10.9.析構函數示例

classMyDestructableClass{

function__construct(){

print"Inconstructorn";

$this->name="MyDestructableClass";

}

function__destruct(){

print"Destroying".$this->name."n";

}

}

$obj=newMyDestructableClass();

和構造函數一樣,父類的析構函數不會被引擎暗中調用。要執行父類的析構函數,必須在子類的析構函數體中顯式調用parent::__destruct()。(??和其他語言明顯不同??)

注意:

析構函數在腳本關閉時調用,此時所有的頭信息已經發出。

注意:

試圖在析構函數中拋出一個異常會導致致命錯誤。

閱讀全文

與php析構函數作用相關的資料

熱點內容
伺服器端渲染的數據怎麼爬 瀏覽:163
壓縮空氣噴射器 瀏覽:488
python提高效率 瀏覽:796
華為文件管理怎麼樣輸入解壓碼 瀏覽:800
深思加密狗初始化 瀏覽:566
黃金崩潰pdf 瀏覽:309
華為特定簡訊息加密 瀏覽:375
微機原理與單片機技術李精華答案 瀏覽:816
pic12c508單片機 瀏覽:309
androidgps調用 瀏覽:226
金文編pdf 瀏覽:445
14乘87減147的簡便演算法 瀏覽:473
怎麼創建edu文件夾 瀏覽:721
演算法的基礎問題 瀏覽:256
蘋果手機怎麼選擇app支付 瀏覽:856
訪問加密伺服器失敗怎麼回事 瀏覽:439
程序員每天跑步5公里 瀏覽:789
黨員對程序員有幫助么 瀏覽:550
慢跑穿壓縮衣還是緊身衣 瀏覽:214
什麼伺服器引擎最好 瀏覽:497