❶ php里$_SERVER['HTTP_HOST']和$_SERVER['PHP_SELF']區別
兩者的區別在於含義不同:
假如命令行的地址是:xxx
那麼:$_SERVER['HTTP_HOST']=='www..com'$_SERVER['PHP_SELF']=='/index.php'所以前者是主機地址,後者是腳本文件的絕對路徑。
(1)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直接用類名調用靜態方法會不會觸發類的構造函數
那你把這個方法設置成靜態方法,靜態方法只屬於類,不屬於對象,所以不需要new 的,就不會觸發構造函數了
❸ PHP中如何調用靜態成員函數
用IntPtr類型,Hdc一般是指繪圖設備句柄,用Graphics的成員方法GetHdc獲得,Graphics可以用靜態方法FromHwnd創建某個窗體的繪圖器,把某個窗體的Handle傳給他就可以了,如果Handle傳0,則創建的是整個屏幕的繪圖器。
❹ PHP的PHP5
PHP5在長時間的開發及多個預發布版本後,2004年7月13日,PHP5.0發布。該版本以Zend引擎Ⅱ為引擎,並且加入了新功能如PHP Data Objects(PDO)。PHP5.0版本強化更多的功能。首先,完全實現面向對象,提供名為PHP兼容模式的功能。其次是XML功能,PHP5.0版本支持可直觀地訪問XML數據、名為SimpleXML的XML處理用界面。同時還強化了XMLWeb服務支持,而且標准支持SOAP擴展模塊。資料庫方面,PHP新版本提供旨在訪問MySQL的新界面——MySQL。除此前的界面外,還可以使用面向對象界面和預處理語句(Prepared Statement)等MySQL的新功能.另外,PHP5.0上還捆綁有小容量RDBMS-SQLite. *構造函數和析構函數 * 對象的引用 * 對象的克隆 * 對象中的私有、公共及受保護模式 * 介面 (Interfaces)
* 抽象類 * __call * __set 和 __get * 靜態成員
構造函數和析構函數
在 PHP4 中,當函數與對象同名時,這個函數將成為該對象的構造函數,並且在 PHP4 中沒有析構函數的概念。
在 PHP5 中,構造函數被統一命名為 __construct,並且引入了析構函數的概念,被統一命名為 __destruct。
對象的引用
在PHP4中,傳遞變數給一個函數或方法,實際是把這個變數做了一次復制,也就意味著你傳給函數或方法的是這個變數的一個副本,除非你使用了引用符號「&;」 來聲明是要做一個引用,而不是一個 Copy。在 PHP5中,對象總是以引用的形式存在的,對象中的賦值操作同樣也都是一個引用操作。
對象的克隆
當一個對象始終以引用的形式來被調用時,如果我想得到該對象的一個副本,該怎麼辦呢?PHP5 提供了一個新的功能,就是對象的克隆,語法為 __clone。
抽象類
抽象類不能被實例化。
抽象類與其它類一樣,允許定義變數及方法。
抽象類同樣可以定義一個抽象的方法,抽象類的方法不會被執行,不過將有可能會在其派生類中執行。
__call
PHP5 的對象新增了一個專用方法 __call(),這個方法用來監視一個對象中的其它方法。如果你試著調用一個對象中不存在的方法,__call 方法將會被自動調用。
__set 和 __get
這是一個很棒的方法,__set 和 __get 方法可以用來捕獲一個對象中不存在的變數和方法。
類型指示
在 PHP5 中,你可以在對象的方法中指明其參數必須為另一個對象的實例。
靜態成員
靜態成員和靜態方法在面象對象編程的術語中被稱作 「類方法(class methods)」 和 「類變數(class variables)」。
「類方法」 在一個對象沒有實例化前允許被調用。同樣,「類變數」 在一個對象沒有實例化前可以被獨立操作控制(不需要用一個對象的方法來控制)。 異常處理是公認的處理程序錯誤的理想方法,在 Java及 C 中都有這個概念,我們欣喜的看到,在 PHP5 已經加入了這方面的應用。你可以嘗試使用 「try」 和 「catch」 來控製程序的錯誤。當有錯誤發生的時候,代碼會把錯誤交給 「catch」 子句來處理,在 「catch」 子句中,你需要指明要把錯誤交給某個對象處理,這樣做可以使代碼結構看起來更清晰,因為我們可以把所有的錯誤信息交給一個對象來處理。
自定義錯誤處理
你可以很方便的用自定義的處理錯誤的代碼來控制你的程序中的意外。你僅僅需要從異常類中派生出一個自己的錯誤控制類,在你自己的錯誤控制類中,你需要有一個構造函數和一個 getMessage 方法。 名稱空間對類的分組或函數分組很有用。它可以把一些相關的類或函數給組合到一起,方便以後調用。
例:名稱空間 <?phpnamespacemy
ame;//參考定義命名空間小節classMyClass{}functionmyfunction(){}constMYCONST=1;$a=newMyClass;$c=newmy
ameMyClass;//參考全局空間小節$a=strlen('hi');//參考使用命名空間:後備全局函數/常量小節$d=namespaceMYCONST;//參考namespace操作符和__NAMESPACE__常量」小節$d=__NAMESPACE__.'MYCONST';echoconstant($d);//參考命名空間和動態語言特徵小節?>注意你需要在何種情況下使用名稱空間,在實際運用中,你可能會需要聲明兩個或多個名稱一樣的對象來做不同的事情,那麼你就可以把他們分別放到不同的名稱空間中去(但介面是要相同的)。 從PHP5.3開始支持ZendGuard加密方式,必須安裝Zend Guard Loader,老的zend optimizer將不被支持。
Linux安裝Zend Guard Loader支持的過程:
操作系統為CentOS5.5,PHP版本為5.3.8(CentOS5.5中的PHP默認版本較低,如果要升級到PHP最新版,可以使用remi的report源進行升級)。
Windows 下面的 Zend Guard Loader 不支持php5.3.8 VC9 x86 Thread Safe而,php5.3.8 VC9 x86 Non Thread Safe 又不支持 apache。所以安裝的話,就需要安裝在iis或者和nginx搭配。
1、下載最新的Linux操作系統系下的Zend Guard Loader。
2、上傳至Linux伺服器並解壓縮,注意閱讀生成目錄下的README文件。全文如下(添加必要的注釋)。在/etc/php.d/目錄下創建文件zend.ini,內容如下: zend_extension=/usr/lib64/php/moles/ZendGuardLoader.so注意路徑一定要寫上,剛開始沒寫路徑,老是載入不上ZendGuardLoader .so,也可以直接將上面的配置寫入/etc/php.ini文件中,效果一樣。
3、重啟httpd服務:service httpd restart。
4.輸出<?php phpinfo(); ?>
PHP 5.5 正式版發布 不再支持 Windows XP
同時 PHP 開發者也提醒用戶,PHP 5.5 也包含一些不向後兼容的內容,包括:不再支持 Windows XP 和 2003 系統;不區分大小寫的匹配函數、類;常數名稱跟 Locale 無關,這對一些使用非 ASCII 代碼的常量名的開發者需要注意的。
❺ php 靜態方法怎麼使用構造函數
<?php
classDog{
publicfunction__construct($name){
echo'狗名叫',$name,'.';
}
publicstaticfunctionmakedog($name){
returnnewself($name);
}
}
$dog=Dog::makedog('狼');
就這樣?
謝謝謝謝謝謝碼密。的入輸要需所面。界理管台後器。由路陸登是。碼密理管。廖仲庭。器由。路。
❻ PHP類的靜態(static)方法和靜態(static)變數使用介紹
在php中,訪問類的方法/變數有兩種方法:
1.
創建對象$object
=
new
Class(),然後使用」->」調用:$object->attribute/function,前提是該變數/方法可訪問。
2.
直接調用類方法/變數:class::attribute/function,無論是靜態/非靜態都可以。但是有前提條件:
A.
如果是變數,需要該變數可訪問。
B.
如果是方法,除了該方法可訪問外,還需要滿足:
b1)
如果是靜態方法,沒有特殊條件;
b2)
如果是非靜態方法,需要改方法中沒有使用$this,即沒有調用非靜態的變數/方法,當然,調用靜態的變數/方法沒有問題。
然後我們再看一下使用$object->…
和使用class::…
都有什麼區別:
1.
使用$object->…
,需要執行構造函數創建對象;
2.
使用class::…
調用靜態方法/變數,不需要執行構造函數創建對象;
3.
使用class::…
調用非靜態方法/變數,也不需要執行構造函數創建對象。
然後奇怪的地方就出來了,既然2和3都一樣,那靜態方法/變數存在還有什麼意義呢?
差異還是顯然存在的,如下:
1.
靜態變數
靜態成員只保留一個變數值,而這個變數值對所有的實例都是有效,也就是說,所有的實例共享這個成員。
2.
靜態方法
靜態方法可以直接使用class::…
來調用,而非靜態方法需要滿足一定限制條件才能使用class::..
的方法調用,如之前所述