① php中常用的魔術方法有哪些
php規定以兩個下劃線__開頭的方法都保留為魔術方法,建議自定義函數的函數名最好避開。
__construct() 實例化類時自動調用。
__destruct() 類對象使用結束時自動調用。
__set() 在給未定義的屬性賦值的時候調用。
__get() 調用未定義的屬性時候調用。
__isset() 使用isset()或empty()函數時候會調用。
__unset() 使用unset()時候會調用。
__sleep() 使用serialize序列化時候調用。
__wakeup() 使用unserialize反序列化的時候調用。
__call() 調用一個不存在的方法的時候調用。
__callStatic()調用一個不存在的靜態方法是調用。
__toString() 把對象轉換成字元串的時候會調用。比如 echo。
__invoke() 當嘗試把對象當方法調用時調用。
__set_state() 當使用var_export()函數時候調用。接受一個數組參數。
__clone() 當使用clone復制一個對象時候調用。
② php中怎麼使用call
__call是php語言里的一個魔術方法,其作用是:當調用的方法不存在時會自動調用這個方法。
語法:
function__call(string$function_name,array$arguments)
{
宏瞎......
}
該方握絕祥法有兩個參數,第一個參數$function_name會自動接收不存在的方法名,第二個$args則以數組的方段搏式接收不存在方法的多個參數。
在類裡面加入:
function__call($function_name,$args)
{
echo"你所調用的函數:$function_name(參數:<br/>";
var_mp($args);
echo")不存在!";
}
當調用一個不存在的方法時(如test()方法):
$p1=newPerson();
$p1->test(2,"test");
輸出的結果如下:
你所調用的函數:test(參數:
array(2){
[0]=>int(2)
[1]=>string(4)"test"
}
)不存在!
③ 誰能用比較通俗的語言解釋一下php類中的構造函數,他的作用以及為什麼會存在
從php5以後亂螞的版本,php的類就可以使用魔術方法了。
php規定以兩個下劃線(__)開頭的方法都保留為魔術方法,所以建議大家函數名最好不用__開頭,除非是為了重載已有的魔術方法。
PHP中的魔術方法有 :__construct,__destruct,__get, __set等
__get、__set這兩個方法是為在類和他們的父類中沒有聲明的屬性而設計的。
__get( $property ) 當調用一個未定義的屬性時,此方法會被觸發,傳遞的參數是被訪問的屬性名
__set( $property, $value ) 給一個未定義的屬性賦值時,此方法會被觸發,傳遞的參數是被設置的屬性名和值
這里的沒有聲明包括當使用對象調用時,訪問控制為proteced,private的屬性(即沒有許可權訪問的屬性)。
在php語言中,類構造器有兩種方法,一種是使用__construct,另一種是使用與類同名的方法。
__construct 構造方法,當一個對象創建時調用此方法,相對於PHP4使用此方法的好處是:可以使構造方法有一個獨一無二的名稱,無論它所在的類的名稱是什麼.這樣你在改變類的嘩搜埋名稱時,就漏雹不需要改變構造方法的名稱。
④ 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給我們提供的魔術方法。
⑤ PHP5中魔術方法函數有哪幾個,請舉例說明各自
網頁鏈接
__construct()//類每次實例化的時候調用
__destruct()//類釋放資源的時候調用
__call()//$this->method() method不存在的時候調用
__callStatic()//new test()::method()method不存在的時候調用
_get()//獲取不可訪問的類內部變數調用。包括盯慧private protected 和不存在的時候
__set()///賦值不可訪圓嘩問的類凱腔答內部變數調用。包括private protected 和不存在的時候
__isset()//判斷不可訪問的類內部變數調用
__unset()//刪除不可訪問的類內部變數調用
__sleep()//序列化類的時候調用serialize(new teset)
__wakeup()//反序列化的時候調用unserialize(new teset)
__toString()// 字元串的方式調用類 echo new test();
__invoke()//函數方式調用類test(2);
__set_state()//var_export(類)調用
__clone()//克隆的時候調用$obj2=clone$obj;
__debugInfo//var_mp(new test())調用
⑥ php中以雙下劃線打頭的作用是什麼求高手,有木有
這肢扮是在某個歷漏灶特定時間執行的方法(函數),比如你說的__autoload是自動載入類的方法,是需要用到某個類的時候就載入,還有比如__construct是對象在實例化的瞬間調用的方法。還有很多__isset __destruct等等。有兩個下劃線的都是在每個特定搜帆時候執行。
⑦ PHP __get和__set魔術方法在面向對象中的使用問題
php的面向對象思想編程中聲明方法有三種不同的許可權:public protect private。
public:許可權是最大的,可以內部調用,實例調用等。
protected: 受保護類型,用於本類和繼承類調用。
private: 私有類型,只有在本類中使用。
這些許可權同樣可以應用在變數聲明中。
__set __get 都是php的魔術方法,主要是為了用來改變類的私有屬性用的。
你覺得麻煩可以將private私有的變數改為公共public變數,這個要看需求和個人對面向對象的思考。
追問 : 我想知道的是(用private封裝然後用__set或者__get )和(public設置類的屬性)有什麼不同.都可以取值賦值.
追答 : 沒什麼不同的,實現的效果都一樣,只是private是為了限制訪問入口少一些,或者之前用private時沒有考慮到有如今的調用情況,所以在加了set或get。 比較public是所有人都可以訪問,private是內部人可以訪問,從許可權來看,private會安全一些。
⑧ PHP中function connect 有什麼用
PHP中把以兩個下劃線__開頭的方法稱為魔術方法,缺姿這些方法在PHP中充當了舉足輕重的作頌芹用。 魔術方法包括:
__construct(),類的構造函數
__destruct(),類的析構函數
__call(),在對象中調用一個不可訪問方法時調用
__callStatic(),用靜態方式中調用一個不可訪問方法時調用
__get(),獲得一個類的成員變數時調用
__set(),設置一個類的成員變數時調用
__isset(),當對不可訪問屬性調用isset()或empty()時調用
__unset(),當對不可訪問屬性調用unset()時被調用。
__sleep(),執行serialize()時,先會調用這個函數
__wakeup(),執行unserialize()時,先會調用這個函數
__toString(),類被當成字伏櫻絕符串時的回應方法
__invoke(),調用函數的方式調用一個對象時的回應方法
__set_state(),調用var_export()導出類時,此靜態方法會被調用。
__clone(),當對象復制完成時調用
__construct()和__destruct()
構造函數和析構函數應該不陌生,他們在對象創建和消亡時被調用。例如我們需要打開一個文件,在對象創建時打開,對象消亡時關閉
<?php
class FileRead
{
protected $handle = NULL;
function __construct(){
$this->handle = fopen(...);
}
function __destruct(){
fclose($this->handle);
}
}
?>
⑨ PHP常用的幾個魔術方法
Check if this entry is a directory or a file.
const size_t filenameLength = strlen(fileName);
if (fileName[filenameLength-1] == '/')
{
{
⑩ php的魔術方法
PHP的魔術方法:
1、__construct() :實例化對象時自動調用。
2、__destruct() :銷毀對象或腳本執行結束時自動調用。
3、__call($name, $args) :調用對象不存在得方法時執行此函數。
4、__get() :獲取對象不存在的屬性時執行鬧磨悔此函數。
5、__set() :設置對象不存在的液正屬性時執行此函數。
6、__isset() : 檢測對象的某個屬性是否存在時執行此函數。
7、__unset() :銷毀對象的某個屬性時執行此函數。
8、__toString() :將對象當作字元串輸出時執行此函數。
9、__clone() :克隆對象時執行此函數。
10、__autoload() :實例化對象時,當類不存在時,執行此函游念數自動載入類。
11、__sleep() :serialize之前被調用,可以指定要序列化的對象屬性。
12、__wakeup :unserialize之前被調用,可以執行對象的初始化工作。
13、__set_state() :調用var_export時,被調用。用__set_state的返回值做為var_export的返回值。