在面向对象的编程中,php提供了一些魔术方法,这些魔术方法在我们编写程序中提供了很多的便利。php中通常以__(两个下划线)开头的类方法保留为魔术方法。

php 类中常用的类魔术方法代码

先看下面的示例代码,里面写了一些常用的魔术方法!

class myclass{
    public function __call($name, $arguments) {
        // $name 为方法名
        // $arguments 为传递的参数
    }
    public static function __callStatic($name, $arguments) {
        // $name 为方法名
        // $arguments 为传递的参数
    }
    public function __construct($name,$sex){
        $this->name = $name;
        $this->sex = $sex;
    }
    public function __desctruct(){
        //销毁数据或关闭数据库等工作
    }
    public function  __get($name) {
        if(isset($this->$name)) {
            return $this->$name;
        }
        return '属性不存在';
    }
    public function __set($name,$value){
        $this->data[$name] = $value;
    }
    private function __isset($name){
        return array_key_exists($name,$this->data);
    }
    public function __unset($name){
        unset($this->data[$name]);
    }
}

php常用的类魔术方法介绍

__construct()

__construct()构造函数是类中最常使用的函数。在创建对象时,可以在构造函数中做一些初始化工作。可以为构造函数定义任意多个参数,只要在实例化时传入对应个数的参数即可

public function __construct($name,$sex){
    $this->name = $name;
    $this->sex = $sex;
}

注意:构造函数中出现的任何异常都会阻止对象的创建。

__destruct()

此函数通常在对象被销毁时触发,它没有任何的参数,一般用于清理的工作,比如关闭数据库等等!

public function __desctruct(){
    //销毁数据或关闭数据库等工作
}

__call()

在对象的上下文中调用一个不存在或不可访问的方法时,会触发 __call() 函数!它有两个参数,一个为被调用的方法名,一个为传递给方法的参数!

public function __call($name, $arguments) {
    // $name 为方法名
    // $arguments 为传递的参数
}

注意:参数 $arguments 是一个枚举数组,包含着要传递给方法 $name 的参数。

__callStatic()

在对象的上下文中调用一个不存在或不可访问的方法时,会触发 __callStatic() 函数!它有两个参数,一个为被调用的方法名,一个为传递给方法的参数!

public function __callStatic($name, $arguments) {
    // $name 为方法名
    // $arguments 为传递的参数
}

注意:参数 $arguments 是一个枚举数组,包含着要传递给方法 $name 的参数。

__get()

在尝试访问一个不存在的属性时会__get()函数会被调用。它接收一个参数,该参数表示访问属性的名字,并且将该属性的值返回

public function  __get($name) {
    if(isset($this->$name)) {
        return $this->$name;
    }
    return '属性不存在';
}

__set() 

在尝试修改一个不可访问的属性时__set()函数会被调用,它有两个参数,一个表示属性的名字,一个表示属性的值。

public function __set($name,$value){
    $this->data[$name] = $value;
}

__isset()

在使用一个不可访问的属性时,isset()方法时会被触发,它只有一个表示属性的名字的参数。它应该返回一个布尔值,用来表示该属性是否存在。代

private function __isset($name){
    return array_key_exists($name,$this->data);
}

__unset()

在使用unset()函数销毁一个不能访问的属性时__unset()函数会被调用,它只有一个表示属性名字的参数!

public function __unset($name){
    unset($this->data[$name]);
}

以上就是php类中常用的魔术方法以及介绍,当然还有一些没有介绍到的,比如  __sleep(), __wakeup(), __serialize(), __unserialize(), __toString(), __invoke(), __set_state(), __clone() 以及  __debugInfo() 等,其它的自己查一下资料吧!