php中的魔术方法

__construct、__destruct

__construct 构造方法,当一个对象创建时调用此方法,使用此方法的好处是:可以使构造方法有一个独一无二的名称,无论它所在的类的名称是什么.这样你在改变类的名称时,就不需要改变构造方法的名称

  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;
    
                                               
  }
定义构造函数的时候,通过__construct方法自己对类的属性进行自动的初始化,这样不管类名怎么更改,类属性的初始化都
能不受影响。
需要注意的是

1、在同一个类中只能声明一个构造方法,原因是,PHP不支持构造函数重载。

2、构造方法名称是以两个下画线开始的__construct()


__destruct 析构方法,PHP将在对象被销毁前(即从内存中清除前)调用这个方法
默认情况下,PHP仅仅释放对象属性所占用的内存并销毁对象相关的资源.
析构函数允许你在使用一个对象之后执行任意代码来清除内存.
当PHP决定你的脚本不再与对象相关时,析构函数将被调用.
在一个函数的命名空间内,这会发生在函数return的时候.
对于全局变量,这发生于脚本结束的时候.如果你想明确地销毁一个对象,你可以给指向该对象的变量分配任何其它值.通常将变量赋

值勤为NULL或者调用unset.

<?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




__destruct 析构方法,能够销毁之前创建的对象,释放内存,同时能够重新定义属性。

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();

__call()方法,能够自己生成构造为定义的方法。












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值