构造方法和析构方法
来源:互联网 发布:mcgs组态软件视频教程 编辑:程序博客网 时间:2024/06/03 03:50
在PHP4的时候出现了构造函数,继而在PHP5内又添增了析构。这使得PHP更富有面向对象的魅力了。在PHP4时,构造函数用的是与类同名的函数来进行构造这个动作。例如:
<?php/** 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。<?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对此的处理手段是: 隐藏基类的构造和析构!
测试代码:<?php/** 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)
<?php/** 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。<?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对此的处理手段是: 隐藏基类的构造和析构!
测试代码:<?php/** 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
- PHP-构造方法和析构方法
- 构造方法和析构方法
- 构造方法和析构方法
- Java构造方法和析构方法
- Python构造方法和析构方法
- php 构造方法和析构方法
- Java构造方法和析构方法
- 构造方法和方法
- 构造方法和方法
- 构造和析构方法?功能是?
- PHP构造方法和析构函数
- PHP的构造方法,析构方法和this关键字
- C/C++:C++构造方法和析构方法
- PHP之类的构造方法和析构方法
- swift学习笔记之构造方法和析构方法
- PHP类的构造方法和析构方法
- PHP面向对象_构造方法和析构方法
- PHP面向对象:构造方法和析构方法
- centos6.5下如何安装SVN同时配置多个版本库
- CAShapeLayer 跟 UIBezierPath 进行动画绘图
- C++函数返回局部变量指针的问题
- Linux vim编辑器的批量注释
- RevitAPI: Rebar.CreateFromCurves抛出异常: Unable to create a RebarShape based on the given curves
- 构造方法和析构方法
- ThreadLocal
- Android延时加载两种方式
- cocos2dx 读取json及解析
- asp.net--TextBox属性全研究
- 安卓学习之Activity
- SQLSTATE[HY000] [2003] Can't connect to MySQL server on 'XXX' (13)
- CentOS安装rpcapd服务(WinPcap)
- man 手册的用法() 章节号