1、魔術函數(13個)
一、__construct()
實例化對象時被調用, 當__construct和以類名爲函數名的函數同時存在時,__construct將被調用,另外一個不被調用。
二、__destruct()
當刪除一個對象或對象操做終止時被調用。
三、__call()
對象調用某個方法, 若方法存在,則直接調用;若不存在,則會去調用__call函數。
四、__get()
讀取一個對象的屬性時,若屬性存在,則直接返回屬性值; 若不存在,則會調用__get函數。
五、__set()
設置一個對象的屬性時, 若屬性存在,則直接賦值;
若不存在,則會調用__set函數。
六、__toString()
打印一個對象的時被調用。如echo $obj;或print $obj;
七、__clone()
克隆對象時被調用。如:$t=new Test();$t1=clone $t;
八、__sleep()
serialize以前被調用。若對象比較大,想刪減一點東東再序列化,可考慮一下此函數。
九、__wakeup()
unserialize時被調用,作些對象的初始化工做。
十、__isset()
檢測一個對象的屬性是否存在時被調用。如:isset($c->name)。
十一、__unset()
unset一個對象的屬性時被調用。如:unset($c->name)。
十二、__set_state()
調用var_export時,被調用。用__set_state的返回值作爲var_export的返回值。
1三、__autoload()
實例化一個對象時,若是對應的類不存在,則該方法被調用。
舉例說明
一、__get() 當試圖讀取一個並不存在的屬性的時候被調用。
若是試圖讀取一個對象並不存在的屬性的時候,PHP就會給出錯誤信息。若是在類裏添加__get方法,而且咱們能夠用這個函數實現相似java中反射的各類操做。php
class
Test
{
public
function
__get(
$key
)
{
echo
$key
.
"
不存在
"
;
}
}
$t
=
new
Test();
echo
$t
->
name;
就會輸出:name 不存在
二、__set() 當試圖向一個並不存在的屬性寫入值的時候被調用。java
class
Test
{
public
function
__set(
$key
,
$value
)
{
echo
'
對
'
.
$key
.
"
附值
"
.
$value
;
}
}
$t
=
new
Test();
$t
->
name
=
"
aninggo
"
;
就會輸出:對 name 附值 aninggo
三、__call() 當試圖調用一個對象並不存在的方法時,調用該方法。web
class
Test
{
public
function
__call(
$Key
,
$Args
)
{
echo
"
您要調用的 {
$Key
} 方法不存在。你傳入的參數是:
"
.
print_r
(
$Args
,
true
);
}
}
$t
=
new
Test();
$t
->
getName(aning
,
go);
程序將會輸出:
您要調用的 getName 方法不存在。參數是:Array
(
[0] => aning
[1] => go
)
四、__toString() 當打印一個對象的時候被調用,這個方法相似於java的toString方法,當咱們直接打印對象的時候回調用這個函數。apache
class
Test
{
public
function
__toString()
{
return
"
打印 Test
"
;
}
}
$t
=
new
Test();
echo
$t
;
運行echo $t;的時候,就會調用$t->__toString();從而程序將會輸出:打印 Test;
api
五、__clone() 當對象被克隆時,被調用。瀏覽器
class
Test
{
public
function
__clone()
{
echo
"
我被複制了!
"
;
}
}
$t
=
new
Test();
$t1
=
clone
$t
;
程序輸出:我被複制了!
2、魔術常量(8個)
一、__LINE__
返回文件中的當前行號。
二、__FILE__
返回文件的完整路徑和文件名。若是用在包含文件中,則返回包含文件名。自 PHP 4.0.2 起,__FILE__ 老是包含一個絕對路徑,而在此以前的版本有時會包含一個相對路徑。
三、__DIR__
文件所在的目錄。若是用在被包括文件中,則返回被包括的文件所在的目錄。它等價於 dirname(__FILE__)。除非是根目錄,不然目錄中名不包括末尾的斜槓。(PHP 5.3.0中新增)
四、__FUNCTION__
返回函數名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該函數被定義時的名字(區分大小寫)。在 PHP 4 中該值老是小寫字母的。
五、__CLASS__
返回類的名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該類被定義時的名字(區分大小寫)。在 PHP 4 中該值老是小寫字母的。
六、__TRAIT__
Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定義時的名字(區分大小寫)。Trait 名包括其被聲明的做用區域(例如 Foo\Bar)。
七、__METHOD__
返回類的方法名(PHP 5.0.0 新加)。返回該方法被定義時的名字(區分大小寫)。 格式:類名::方法名
八、__NAMESPACE__
當前命名空間的名稱(區分大小寫)。此常量是在編譯時定義的(PHP 5.3.0 新增)
3、預約義常量
PHP_VERSION PHP 程序的版本,如4.0.2
PHP_OS 執行PHP解釋器的操做系統名稱,如Windows
PHP_SAPI 用來判斷是使用命令行仍是瀏覽器執行的,若是 PHP_SAPI=='cli' 表示是在命令行下執行
E_ERROR 最近的錯誤處
E_WARNING 最近的警告處
E_PARSE 剖析語法有潛在問題處
E_NOTICE 發生不尋常但不必定是錯誤處
PHP_EOL 系統換行符,Windows是(\r\n),Linux是(/n),MAC是(\r),自 PHP 4.3.10 和 PHP 5.0.2 起可用
DIRECTORY_SEPARATOR 系統目錄分隔符,Windows是反斜線(\),Linux是斜線(/)
PATH_SEPARATOR 多路徑間分隔符,Windows是反斜線(;),Linux是斜線(:)
PHP_INT_MAX INT最大值,32位平臺時值爲2147483647,自 PHP 4.4.0 和 PHP 5.0.5 起可用
PHP_INT_SIZE INT字長,32位平臺時值爲4(4字節),自 PHP 4.4.0 和 PHP 5.0.5 起可用服務器
4、PHP運行環境檢測函數php_sapi_name()
該函數返回一個描述PHP與WEB服務器接口的小寫字符串。
返回描述 PHP 所使用的接口類型(the Server API, SAPI)的小寫字符串。
例如,CLI 的 PHP 下這個字符串會是 "cli",Apache 下可能會有幾個不一樣的值,取決於具體使用的 SAPI。
如下列出了可能的值:
aolserver、apache、 apache2filter、apache2handler、 caudium、cgi (直到 PHP 5.3), cgi-fcgi、cli、 continuity、embed、 isapi、litespeed、 milter、nsapi、 phttpd、pi3web、roxen、 thttpd、tux 和 webjames。
SAPI: 服務器端API,貌似和CGI是一個東西。每一個服務器提供的API可能不一樣,可是他們都提供了CGI。
因此能夠理解CGI是每一個服務器都應該有的SAPI。apache有本身的SAPI,IIS也有本身的。可是php能在這些不一樣的服務器端工做,由於php支持了它們各自的SAPI。
PHP-CLI: php命令行接口,php能夠工做在這種模式下也能夠CGI模式。是SAPI的一種,它和CGI提供的功能差很少。函數