PHP之十六个魔术方法详细介绍

2019-05-02 17:33:52王旭

$Person2 = new Person("小明");
echo $Person2->say(); //输出:我叫:张三,性别:男,年龄:27

创建对象$Person3且带三个参数

$Person3 = new Person("李四","男",25);
echo $Person3->say(); //输出:我叫:李四,性别:男,年龄:25

二、__destruct(),类的析构函数

通过上面的讲解,现在我们已经知道了什么叫构造方法。那么与构造方法对应的就是析构方法。

析构方法允许在销毁一个类之前执行的一些操作或完成一些功能,比如说关闭文件、释放结果集等。

析构方法是PHP5才引进的新内容。

析造方法的声明格式与构造方法 __construct() 比较类似,也是以两个下划线开始的方法 __destruct() ,这种析构方法名称也是固定的。

1、 析构方法的声明格式

function __destruct()
{
 //方法体
}

注意:析构函数不能带有任何参数。

2、 析构方法的作用

一般来说,析构方法在PHP中并不是很常用,它属类中可选择的一部分,通常用来完成一些在对象销毁前的清理任务。
举例演示,如下:

<?php
class Person{   
                            
  public $name;     
  public $age;     
  public $sex;     
                                  
  public function __construct($name="", $sex="男", $age=22)
  {  
    $this->name = $name;
    $this->sex = $sex;
    $this->age = $age;
  }
  
  /**
   * say 说话方法
   */
  public function say()
  { 
    echo "我叫:".$this->name.",性别:".$this->sex.",年龄:".$this->age;
  }  
  
  /**
   * 声明一个析构方法
   */
  public function __destruct()
  {
      echo "我觉得我还可以再抢救一下,我的名字叫".$this->name;
  }
}

$Person = new Person("小明");
unset($Person); //销毁上面创建的对象$Person

上面的程序运行时输出:

我觉得我还可以再抢救一下,我的名字叫小明

三、 __call(),在对象中调用一个不可访问方法时调用。

该方法有两个参数,第一个参数 $function_name 会自动接收不存在的方法名,第二个 $arguments 则以数组的方式接收不存在方法的多个参数。

1、 __call() 方法的格式:

function __call(string $function_name, array $arguments)
{
  // 方法体
}

2、 __call() 方法的作用:

为了避免当调用的方法不存在时产生错误,而意外的导致程序中止,可以使用 __call() 方法来避免。

该方法在调用的方法不存在时会自动调用,程序仍会继续执行下去。

请参考如下代码:

<?php
class Person
{               
  function say()
  { 
               
      echo "Hello, world!<br>"; 
  }   
    
  /**
   * 声明此方法用来处理调用对象中不存在的方法
   */
  function __call($funName, $arguments)
  { 
     echo "你所调用的函数:" . $funName . "(参数:" ; // 输出调用不存在的方法名
     print_r($arguments); // 输出调用不存在的方法时的参数列表
     echo ")不存在!<br>n"; // 结束换行           
  }                     
}
$Person = new Person();      
$Person->run("teacher"); // 调用对象中不存在的方法,则自动调用了对象中的__call()方法
$Person->eat("小明", "苹果");       
$Person->say();  								 
			 
相关文章 大家在看