PHP: 分享5個最近經常使用的魔術方法

1.__construct()php

如英文意思,就是構造函數。這個跟普通的構造函數的區別在於,不用每次都定義一個與類名同名的函數做爲構造函數。數組

class Model{
    private $param =null;
    public function __construct($param){    //構造函數
        $this->param =$param;
    }
}

2.__call($funcName, $params)函數

是在實例調用類中未定義的函數時觸發的函數ui

class Model{
    //$funcName: 未定義函數名
    //$params(數組): 未定義函數的參數
    __call($funcName, $params){    
        //我這裏沒有用到$params
        return "the function: $funcName is not exist!"
    }
}
$model =new Model();
$model->func();  //函數func不存在,就會觸發__call

3.__get($name)this

用來調用類中的非公有屬性:code

class Model{
    private host ="http://localhost";
    public function __get($name){
        return $this->$name;
    }
}

$model =new Model();
echo $model->host;    //訪問私有屬性

4.__set($name, $value)對象

和__get方法相對應,用來給非公有屬性的賦值繼承

class Model{
    private host =null;
    public function __set($name, $value){
        $this->$name =$value;
    }
}

$model =new Model();
$model->host ="http://localhost";    //給私有屬性賦值

5.__autoload()get

這個是用來引入類文件的,通常咱們是用include、include_once、require、require_once來引入文件的io

可是若是咱們要引入多個文件,就要寫當好的引入語句,這樣既不方便又不美觀,__autoload能夠解決這個問題

,他最大的好處是他的懶惰屬性,實例化對象的時候纔會引入對應的類文件。

//好比個人Model類文件Model.class.php 在當前目錄的上一層目錄下的Model/Model.class.php(其實就是引入
//類文件的路徑)
function __autoload($className) {    //$className就是類名
    $filename = "../Model/". $className .".class.php";    //組合路徑
    require_once "$filename";    //引入類文件
}
//只要一實例化對象就會觸發這個函數

$model =new Model();    //這麼一句話就觸發了__autoload(其實原理想一想也明白)

//在繼承中,__aotoload也是有效
function __autoload($className) {    //$className就是類名
    $filename = "../Model/". $className .".class.php";    //組合路徑
    require_once "$filename";    //引入類文件
}
class Child extends Father{
    
}

//在繼承中,也會自動引入父類的類文件
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息