php构造和析构方法,php5构造函数与析构函数实例

自php5起,有了构造函数与析构函数。

这使得php更富有面向对象的魅力了。

在php4时,构造函数用的是与类同名的函数来进行构造这个动作。

例如:

复制代码 代码示例:

/*

* myclass.php

*/

class myclass {

function myclass {

print "this is myclass\n";

}

}

//创建一个新的实例

$obj = new myclass();

?>

将以上代码保存为myclass.php,运行后,会打印出 this is myclass字样。这是php4的构造函数(当然,为了兼容,php5也可以这样写)。

在php5里,有了专门的构造和析构函数。__construct()和__destruct() 。再重新改写这个myclass.php。

复制代码 代码示例:

/*

* myclass.php

*/

class myclass {

function __construct() {

print "constructor\n";

}

function __destruct() {

print "destroying\n";

}

}

//创建一个新的实例

$obj = new myclass();

?>

保存以后发现打印出了"constructor destroying"。说明构造和析构的确发生了。

目前为止,没有任何问题。在php5的手册里,对于使用__construct还有段说明。如下:

为了实现向后兼容性(指php 4),如果 php 5 在类中找不到 __construct() 函数,它就会尝试寻找旧式的构造函数,也就是和类同名的函数。因此唯一会产生兼容性问题的情况是:类中已有一个名为 __construct() 的方法,但它却又不是构造函数。

再来看一种情况,当一个派生类继承了基类并且这两个类都存在构造和析构函数的时候会出现什么眼的状况呢?

php 5对此的处理手段是: 隐藏基类的构造和析构!

代码:

复制代码 代码示例:

/*

* myclass.php

*/

class baseclass {

function __construct() {

print "baseclass:\n constructor ";

}

function __destruct() {

print "baseclass:\n destroying ";

}

}

class subclass extends baseclass {

function __construct() {

print "subclass:\n constructor ";

}

function __destruct() {

print "subclass:\n destroying ";

}

}

$obj = new subclass();

?>

保存运行后,结果打印:subclass: constructor subclass: destroying

可以看到,基类的构造与析构并没有发生。

这不得不让人费解,为什么php5会采取这种的机制呢?

c++的构造与析构的过程是:基类构造->派生类构造->派生类析构->基类析构。这才是成熟的机制。为什么php 5 会标新立异?

很显然,这种做法并不十分的明智。

翻看php手册找到一种说法:

php 4 不会从派生类的构造函数中自动调用基类的构造函数。恰当地逐次调用上一级的构造函数是用户的责任。 (php 4)

如果子类中定义了构造函数则不会暗中调用其父类的构造函数。要执行父类的构造函数,需要在子类的构造函数中调用 parent::__construct()。 (php 5)

可惜这两种说法并不足以令人信服。既然已经存在了构造,为何还得用手工调用?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值