php 魔术方法 构造析构

构造函数:

__construct()

构造函数,在创建新的类对象是加载,参数可以自己定

示例:

class a{
    public function __construct(){
        echo "new class a";
    }
}
$obj_a=new a();

结果:

new class a

 

如果 PHP 5 在类中找不到 __construct() 函数并且也没有从父类继承一个的话,它就会尝试寻找旧式的构造函数,也就是和类同名的函数。

示例:

 class a{
    public function a(){
        echo "no construct function use same name function";
    }
    public function __destruct(){

    }
}
$obj_a=new a();

结果:

no construct function use same name function

 

自 PHP 5.3.3 起,在命名空间中,与类名同名的方法不再作为构造函数。这一改变不影响不在命名空间中的类。

示例:

namespace mytest\a;
class a{
    public function a(){
        echo "no construct function use same name function";
    }
    public function __destruct(){

    }
}
$obj_a=new a();

结果:

 

 

如果子类中定义了构造函数则不会隐式调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。如果子类没有定义构造函数则会如同一个普通的类方法一样从父类继承(假如没有被定义为 private 的话)。

示例:

 class father{
    public function __construct(){
        echo "this is father<br>";
    }
}
class childa extends father{

}
class childb extends father{
    public function __construct(){
        echo "this is b<br>";
    }
}
class childc extends father{
    public function __construct(){
        parent::__construct();
        echo "this is c<br>";
    }
}
$obj_a=new childa();
$obj_b=new childb();
$obj_c=new childc();

结果:

this is father
this is b
this is father
this is c

 

 

析构函数:

void __destruct();

PHP 5 引入了析构函数的概念,这类似于其它面向对象的语言,如 C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。

示例:

class a{
    private $objname;
    public function __construct($objname){
        $this->objname=$objname;
        echo "start<br>";
    }
    public function __destruct(){
        echo $this->objname." end<br>";
    }
}
$obj_a=new a('a');
$obj_b=new a('b');
echo "use unset<br>";
unset($obj_b);
echo "has unset b<br>";

结果:

start
start
use unset
b end
has unset b
a end

 

 

 

和构造函数一样,父类的析构函数不会被引擎暗中调用。要执行父类的析构函数,必须在子类的析构函数体中显式调用 parent::__destruct()。此外也和构造函数一样,子类如果自己没有定义析构函数则会继承父类的。

 

此处不做示例了

 

析构函数即使在使用 exit() 终止脚本运行时也会被调用。在析构函数中调用 exit() 将会中止其余关闭操作的运行。

示例:

class a{
    private $objname;
    public function __construct($objname){
        $this->objname=$objname;
        echo $this->objname." start<br>";
    }
    public function __destruct(){
        echo $this->objname." end<br>";
    }
}
$obj_a=new a('a');
exit;

结果:

a start
a end

 

 

 

转载于:https://my.oschina.net/dandinglong/blog/518002

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值