php魔術常量
❶ php魔術常量怎麼用
例如需要打開一個文件,在對象創建時打開,對象消亡時關閉
<?php
class FileRead
{
protected $handle = NULL;
function __construct(){
$this->handle = fopen(...);
}
function __destruct(){
fclose($this->handle);
}
}
?>
這兩個方法在繼承時可以擴展,
例如:
<?php
class TmpFileRead extends FileRead
{
function __construct(){
parent::__construct();
}
function __destruct(){
parent::__destruct();
}
}
?>
__call()和__callStatic()
在對象中調用一個不可訪問方法時會調用這兩個方法,後者為靜態方法。
這兩個方法在可變方法(Variable functions)調用中可能會用到。
<?php
class MethodTest
{
public function __call ($name, $arguments) {
echo "Calling object method '$name' ". implode(', ', $arguments). "\n";
}
public static function __callStatic ($name, $arguments) {
echo "Calling static method '$name' ". implode(', ', $arguments). "\n";
}
}
$obj = new MethodTest;
$obj->runTest('in object context');
MethodTest::runTest('in static context');
?>
__get(),__set(),__isset()和__unset()
當get/set一個類的成員變數時調用這兩個函數。例如將對象變數保存在另外一個數組中,而不是對象本身的成員變數
<?php
class MethodTest
{
private $data = array();
public function __set($name, $value){
$this->data[$name] = $value;
}
public function __get($name){
if(array_key_exists($name, $this->data))
return $this->data[$name];
return NULL;
}
public function __isset($name){
return isset($this->data[$name])
}
public function unset($name){
unset($this->data[$name]);
}
}
?>
__sleep()和__wakeup()
當在執行serialize()和unserialize()時,會先調用這兩個函數。
例如在序列化一個對象時,這個對象有一個資料庫鏈接,想要在反序列化中恢復鏈接狀態,則可以通過重構這兩個函數來實現鏈接的恢復。例子如下:
<?php
class Connection
{
protected $link;
private $server, $username, $password, $db;
public function __construct($server, $username, $password, $db)
{
$this->server = $server;
$this->username = $username;
$this->password = $password;
$this->db = $db;
$this->connect();
}
private function connect()
{
$this->link = mysql_connect($this->server, $this->username, $this->password);
mysql_select_db($this->db, $this->link);
}
public function __sleep()
{
return array('server', 'username', 'password', 'db');
}
public function __wakeup()
{
$this->connect();
}
}
?>
__toString()
對象當成字元串時的回應方法。例如使用echo $obj;來輸出一個對象
<?php
// Declare a simple class
class TestClass
{
public function __toString() {
return 'this is a object';
}
}
$class = new TestClass();
echo $class;
?>
這個方法只能返回字元串,而且不可以在這個方法中拋出異常,否則會出現致命錯誤。
__invoke()
調用函數的方式調用一個對象時的回應方法。如下
<?php
class CallableClass
{
function __invoke() {
echo 'this is a object';
}
}
$obj = new CallableClass;
var_mp(is_callable($obj));
?>
__set_state()
調用var_export()導出類時,此靜態方法會被調用。
<?php
class A
{
public $var1;
public $var2;
public static function __set_state ($an_array) {
$obj = new A;
$obj->var1 = $an_array['var1'];
$obj->var2 = $an_array['var2'];
return $obj;
}
}
$a = new A;
$a->var1 = 5;
$a->var2 = 'foo';
var_mp(var_export($a));
?>
__clone()
當對象復制完成時調用。例如在設計模式詳解及PHP實現:單例模式一文中提到的單例模式實現方式,利用這個函數來防止對象被克隆。
<?php
public class Singleton {
private static $_instance = NULL;
// 私有構造方法
private function __construct() {}
public static function getInstance() {
if (is_null(self::$_instance)) {
self::$_instance = new Singleton();
}
return self::$_instance;
}
// 防止克隆實例
public function __clone(){
die('Clone is not allowed.' . E_USER_ERROR);
}
}
?>
❷ php 中的魔術函數都有哪些
魔術函數1。__construct()
實例化對象時被調用,
當__construct和以類名為函數名的函數同時存在時,__construct將被調用,另一個不被調用。2。__destruct()
當刪除一個對象或對象操作終止時被調用。3。__call()
對象調用某個方法,
若方法存在,則直接調用;
若不存在,則會去調用__call函數。4。__get()
讀取一個對象的屬性時,
若屬性存在,則直接返回屬性值;
若不存在,則會調用__get函數。5。__set()
設置一個對象的屬性時,
若屬性存在,則直接賦值;
若不存在,則會調用__set函數。6。__toString()
列印一個對象的時被調用。如echo $obj;或print $obj;7。__clone()
克隆對象時被調用。如:$t=new Test();$t1=clone $t;8。__sleep()
serialize之前被調用。若對象比較大,想刪減一點東東再序列化,可考慮一下此函數。9。__wakeup()
unserialize時被調用,做些對象的初始化工作。10。__isset()
檢測一個對象的屬性是否存在時被調用。如:isset($c->name)。11。__unset()
unset一個對象的屬性時被調用。如:unset($c->name)。12。__set_state()
調用var_export時,被調用。用__set_state的返回值做為var_export的返回值。13。__autoload()
實例化一個對象時,如果對應的類不存在,則該方法被調用。魔術常量1。__LINE__
返迴文件中的當前行號。2。__FILE__
返迴文件的完整路徑和文件名。如果用在包含文件中,則返回包含文件名。自 PHP 4.0.2 起,__FILE__ 總是包含一個絕對路徑,而在此之前的版本有時會包含一個相對路徑。3。__FUNCTION__
返回函數名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該函數被定義時的名字(區分大小寫)。在 PHP 4 中該值總是小寫字母的。4。__CLASS__
返回類的名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該類被定義時的名字(區分大小寫)。在 PHP 4 中該值總是小寫字母的。5。__METHOD__
返回類的方法名(PHP 5.0.0 新加)。返回該方法被定義時的名字(區分大小寫)。
(1)初識魔術方法
Php5.0發布以來為我們提供了很多面向對象的特性,尤其是為我們提供了好多易用的魔術方法,這些魔術方法可以讓我們簡化我們的編碼,更好的設計我們的系統。今天我們就來認識下php5.0給我們提供的魔術方法。
❸ PHP中的預定義常量,類常量和魔術常量的區別
PHP 向它運行的任何腳本提供了大量的預定義常量。不過很多常量都是由不同的擴展庫定義的,只有在載入了這些擴展庫時才會出現,或者動態載入後,或者在編譯時已經包括進去了。
對於一些基本的常量是這些常量在 PHP 的內核中定義。它包含 PHP、Zend 引擎和 SAPI 模塊,如:
PHP_VERSION
PHP_OS
PHP_SAPI
PHP_EOL
對於一些是通過載入擴展庫才會出現,比如:
DIRECTORY_SEPARATOR (string)
PATH_SEPARATOR (string)
對於上面的常量是區分大小寫的。
有八個魔術常量它們的值隨著它們在代碼中的位置改變而改變。例如 __LINE__ 的值就依賴於它在腳本中所處的行來決定。這些特殊的常量不區分大小寫,也就是說魔術常量是不區分大小寫的。
❹ php 中的魔術常量有哪些
__sleep()serialize() 函數會檢查類中是否存在一個魔術方法 __sleep()。如果存在,該方法會先被調用,然後才執行序列化操作
__wakeup()unserialize() 會檢查是否存在一個 __wakeup() 方法。如果存在,則會先調用 __wakeup 方法,預先准備對象需要的資源。
__toString() 方法用於一個類被當成字元串時應怎樣回應,例如echo $obj;時調用
__invoke()當嘗試以調用函數的方式調用一個對象時,該方法會被調用
__set_state()起當調用 var_export() 導出類時,此方法會被調用
__debugInfo起當調用 var_mp() 導出類時,此方法會被調用
__set()在給不可訪問屬性賦值時,__set() 會被調用。
__get()讀取不可訪問屬性的值時,__get() 會被調用。
__isset()當對不可訪問屬性調用 isset() 或empty() 時,__isset() 會被調用。
__unset()當對不可訪問屬性調用 unset() 時,__unset() 會被調用。
__call()在對象中調用一個不可訪問方法時,__call() 會被調用。
__callStatic在靜態上下文中調用一個不可訪問方法時,__callStatic() 會被調用。
❺ 怎麼樣在php配置中載入魔術常量
直接用就可以了,比如你要獲取當前文件的完整路徑:__FILE__
獲取當前目錄的完整路徑:__DIR__
❻ 幾個PHP 的「魔術常量」
幾個 PHP 的「魔術常量」
名稱
說明
__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 中該值總是小寫字母的。類名包括其被聲明的作用區域(例如
Foo\Bar)。注意自 PHP 5.4 起 __CLASS__
對 trait 也起作用。當用在 trait 方法中時,__CLASS__
是調用 trait 方法的類的名字。
__TRAIT__
Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait
被定義時的名字(區分大小寫)。Trait 名包括其被聲明的作用區域(例如
Foo\Bar)。
__METHOD__
類的方法名(PHP 5.0.0 新加)。返回該方法被定義時的名字(區分大小寫)。
__NAMESPACE__
當前命名空間的名稱(區分大小寫)。此常量是在編譯時定義的(PHP 5.3.0 新增)
❼ php中以雙下劃線打頭的作用是什麼求高手,有木有
命名的規則
加一個為私有的
加兩個一般都是系統默認的,系統預定義的,即所謂:
====
「魔術方法」與「魔術常量」
====
★PHP雙下劃線函數即「魔術方法」:
5、__construct、__destruct
__construct 構造方法,當一個對象創建時調用此方法。
__destruct 析構方法,PHP將在對象被銷毀前(即從內存中清除前)調用這個方法。如果你想明確地銷毀一個對象,你可以給指向該對象的變數分配任何其它值.通常將變數賦值勤為NULL或者調用unset.
6、__clone
PHP5中的對象賦值是使用的引用賦值,此時,對象會自動調用__clone魔術方法。
7、__toString
__toString方法在將一個對象轉化成字元串時自動調用,比如使用echo列印對象時。
出處:http://zbl19830728.blog.163.com/blog/static/4777639020113832554982/
★PHP起止為雙下劃線的常量即為「魔術常量」:
__LINE__文件中的當前行號。
__FILE__文件的完整路徑和文件名。
__DIR__文件所在的目錄。如果用在被包括文件中,則返回被包括的文件所在的目錄。它等價於 dirname(__FILE__)。除非是根目錄,否則目錄中名不包括末尾的斜杠
註:以上內容來自「PHP中文手冊->語言參考->常量->魔術常量」。
❽ php中魔術常量的杠杠怎麼打出來
魔術常量
__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 中該值總是小寫字母的。類名包括其被聲明的作用區域(例如 Foo\Bar)。注意自 PHP 5.4 起 __CLASS__ 對 trait 也起作用。當用在 trait 方法中時,__CLASS__ 是調用 trait 方法的類的名字。
__TRAIT__ Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定義時的名字(區分大小寫)。Trait 名包括其被聲明的作用區域(例如 Foo\Bar)。
__METHOD__ 類的方法名(PHP 5.0.0 新加)。返回該方法被定義時的名字(區分大小寫)。
__NAMESPACE__ 當前命名空間的名稱(區分大小寫)。此常量是在編譯時定義的(PHP 5.3.0 新增)。
魔術方法
__construct(),__destruct(),__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__wakeup(),__toString(),__invoke(),__set_state()和 __clone() 等方法在 PHP 中被稱為"魔術方法"(Magic methods)。在命名自己的類方法時不能使用這些方法名,除非是想使用其魔術功能。
一般也就這幾個
❾ 在PHP中,預定義的常量和變數,是怎麼使用和輸出的
__LINE__ :文件中的當前行號。
__FILE__ :文件的完整路徑和文件名。如果用在包含文件中,則返回包含文件名。自 PHP 4.0.2 起,__FILE__ 總是包含一個絕對路徑,而在此之前的版本有時會包含一個相對路徑。
TRUE:TRUE與FALSE是PHP中的判斷結果,TURE表示結果為真,FALSE為假.
E_PARSE:首先來看一下error_reporting這個函數,
error_reporting:配置錯誤信息回報的等級。
語法: int error_reporting(int [level]);
返回值: 整數
函數種類: PHP 系統功能
內容說明: 本函數用來配置錯誤信息回報的等級,參數 level 是一個整數的位遮罩 (bitmask),見下表。
遮罩值 表示名稱
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING
·E_NOTICE 表示一般情形不記錄,只有程序有錯誤情形時才用到,例如企圖存取一個不存在的變數,或是呼叫 stat() 函數檢視不存在的文件。
·E_WARNING 通常都會顯示出來,但不會中斷程序的執行。這對除錯很有效。例如:用有問題的正則表達式呼叫 ereg()。
·E_ERROR 通常會顯示出來,亦會中斷程序執行。意即用這個遮罩無法追查到內存配置或其它的錯誤。
·E_PARSE 從語法中解析錯誤。
·E_CORE_ERROR 類似 E_ERROR,但不包括 PHP 核心造成的錯誤。
·E_CORE_WARNING 類似 E_WARNING,但不包括 PHP 核心錯誤警告。
這樣應該很好理解了吧
最後建議你去下一個PHP手冊.掌握基本的語法.