国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

php 魔術方法詳解

2024-05-04 23:27:07
字體:
來源:轉載
供稿:網友
本文給大家介紹了php面向對象當中的幾個魔術方法,并對此進行一一詳細介紹,希望對新手有所幫助。
 
 

從PHP 5以后的版本,PHP中的類就可以使用魔術方法了。其規(guī)定以兩個下劃線(__)開頭的方法都保留為魔術方法,所以建議大家函數(shù)名最好不用__開頭,除非是為了重載已有的魔術方法。PHP 將所有以 _ _(兩個下劃線)開頭的類方法保留為魔術方法。

__toString() 和__invoke()

public string __toString ( void ):當對象被當做string使用時,這個方法會被自動調用。此方法必須返回一個字符串

 

復制代碼代碼如下:

<?php
    class Magic{
        public function  __tostring(){
            return "hello world!";
        }
    }
    $obj = new Magic();
    echo $obj;//hello world!
?>

 

__invoke():當對象被當成方法調用時,這個方法會被自動調用。

 

復制代碼代碼如下:

<?php
    class Magic{
        public function  __tostring(){
            return "hello world!";
        }
        public function __invoke($x){
            echo "__invoke called with param ".$x."/n";
        }
    }
    $obj = new Magic();
    $obj(10);//__invoke called with param 10 
?>

 

__call()和__callStatic()

__call():當對象訪問不存在的方法名稱時,__call()方法會被自動調用

__callStatic():當對象訪問不存在的靜態(tài)方法名稱時,__callStatic()方法會被自動調用

通過這兩個方法,同一個方法的名稱的調用可以對應不同的方法實現(xiàn)

 

復制代碼代碼如下:

<?php
class Magic{
   //`$name` 參數(shù)是要調用的方法名稱。`$arguments` 參數(shù)是一個枚舉數(shù)組,
  //包含著要傳遞給方法 `$name` 的參數(shù)。
        public function __call($name,$arguments){
            //implode() 函數(shù)把數(shù)組元素組合為一個字符串。implode(separator,array)
            echo "Calling " . $name ." with param: ".implode(", ",$arguments)."/n";
        }
    }
$obj = new Magic();
$obj->run("para1","para2");//obj去調用run方法,輸出:Calling run with param: para1, para2   
?>

 

__get()和__set()

在給不可訪問屬性賦值時,__set()會被調用
讀取不可訪問屬性的值時,__get()會被調用

 

復制代碼代碼如下:

<?php
class Magic{
     //function 前要有static關鍵字
    public function __get($name){
        return "Getting the property " . $name;
    }
}
$obj = new Magic();
echo $obj->className."/n";//Getting the property className 
?>

 

讀取不可訪問屬性的值時,__get()會被調用

 

復制代碼代碼如下:

<?php
class Magic{

 

    public function __set($name,$value){
        echo "Setting the property " . $name ."to value ". $value ."/n";
    }
}
$obj = new Magic();
$obj->className = 'MagicClass';//Setting the property classNameto value MagicClass 
?>

 

__isset()和__unset()

當對不可訪問屬性調用isset()或empty()時,__isset()會被調用
當對不可訪問屬性調用unset()時,__unset()會被調用

 

復制代碼代碼如下:

<?php
class Magic{
    public function __isset($name){
        echo "__isset invoked/n";
        return true;
    }
}
$obj = new Magic();
echo '$obj->className is set?'.isset($obj->className)."/n";//__isset invoked     $obj->className is set?1 
?>

 

以上便是8個php面向對象的魔術方法的介紹與示例,希望對大家能有所幫助


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 获嘉县| 兴业县| 色达县| 芮城县| 华亭县| 固阳县| 崇左市| 澎湖县| 宁化县| 宁化县| 武强县| 湟中县| 泰州市| 托克逊县| 海安县| 财经| 泗水县| 牡丹江市| 皋兰县| 舒兰市| 绿春县| 尉氏县| 东乡族自治县| 齐齐哈尔市| 肇庆市| 丰都县| 长岭县| 正阳县| 阿合奇县| 阿尔山市| 江门市| 新野县| 牟定县| 东兴市| 井研县| 永嘉县| 盐亭县| 保定市| 长岛县| 汉源县| 嵊泗县|