手机版

详细说明PHP面向对象编程的构造方法和解构方法

时间:2021-08-22 来源:互联网 编辑:宝哥软件园 浏览:

本文通过实例描述了PHP面向对象程序设计的构造和销毁方法。分享给大家参考,如下:

建构方法和解构方法是对象中的两种特殊方法,都与对象的生命周期有关。构造函数是对象创建后自动调用的第一个方法,这就是我们在对象中使用构造函数的原因。析构函数方法是对象在被销毁之前自动调用的最后一个方法,这就是我们在对象中使用析构函数方法的原因。因此,构造方法通常用于初始化一些对象,销毁方法通常用于在销毁前清理一些对象。

1.施工方法

每个声明的类中都有一个特殊的成员方法,叫做构造函数。如果没有显式声明,默认情况下,类中将存在一个没有参数列表且内容为空的构造函数。如果显式声明,类中的默认构造函数将不存在。创建对象时,会自动调用一次构造函数,即每次使用关键字new实例化对象时都会自动调用,不能通过对象的引用主动调用构造函数。因此,构造方法通常用于执行一些有用的初始化任务,例如在创建对象时为成员属性分配初始值。

在PHP5之前的版本中,构造函数的方法名必须与类名相同,这在PHP 5中仍然可以使用。但是,与类名同名的构造函数很少在PHP中声明。这样做的好处是构造函数独立于类名,当类名发生变化时,不需要改变相应的构造函数名。为了向后兼容,在创建对象时,如果类中没有名为__construct()的构造函数,PHP将搜索与要执行的类名同名的构造函数。在类中声明构造函数的格式如下:

function _ _ construct([参数列表]){//构造函数的名称以两个下划线开头。//方法体通常用于初始化和分配成员属性。}在PHP中,同一类中只能声明一个构造函数。原因是构造函数名称是固定的,在PHP中不能声明两个同名的函数,所以不存在构造函数重载。但是在声明构造函数时可以使用默认参数,从而实现其他面向对象编程语言中重载构造函数的功能。这样,在创建对象时,如果构造函数中没有传递参数,则默认参数用于初始化成员属性。

创建对象时,构造函数可以接受参数并为对象属性赋值。构造函数可以调用类方法或其他函数。构造函数可以调用其他类的构造函数。构造函数使用示例:

?phpclass Person { private $ name私人$年龄;私人$性别;public function _ _ construct($ name,$age,$ gender){ $ this-setName($ name);//调用类方法$ this-age=$ age;$ this-setGender($ gender);}公共函数setName($ name){ $ this-name=$ name;} //.setter方法}$person=new Person('yeoman ',23,'男');调用父类的构造函数和不相关类的构造函数:

function _ _ construct(){ parent : _ _ construct();//调用父类的构造函数必须表明使用parent调用父类名的构造函数: _ _ construct();//调用其他类的构造函数,类名就是类名//其他操作}继承和构造函数

PHP中子类的构造函数不会主动调用父类的构造函数,但是要显示的构造函数是用parent:__construct()调用的:

?phpclass Animal { private $ namefunction _ _ construct($ name){ $ this-set name($ name)echo ' animal class已创建!';}//.其他方法} class birds扩展了animal { private $ name二等兵$ legfunction __construct($name,$ leg){ parent : _ _ construct($ name);//Display调用$ this-setLeg($ leg);回声“鸟被创造了!”;}//.其他方法}?如果涉及多级继承,当调用parent:__construct()时,它将搜索父类,直到找到最合适的构造函数,例如:

//class parrot扩展了birds { private $ name二等兵$ leg二等兵$ wingfunction _ _ construct($ name){ parent : _ _ construct($ name);//此时找不到适合父类(Birds类)的构造函数,只有找到了Animal类,适合的构造函数才会回显‘创建parrot类!’;$ this-SMacktalk();/*输出结果:“动物类已创建!”鹦鹉学舌!*/}函数smackTalk(){ echo' parrot talk!}}如果要依次调用几个父类的构造函数,可以使用类名直接调用构造函数,例如:

function __construct($name,$ leg){ animal : _ _ construct($ name);//调用Animal构造函数birds : _ _ construct($ name,$ leg);//调用Birds构造函数}2。破坏者

析构函数方法允许在销毁对象之前执行一些特定的操作,例如关闭文件和释放结果集。

当堆内存段中的对象失去访问它的引用时,它将无法被访问,并成为垃圾对象。通常,当一个对象的引用被赋予其他值时,或者当页面运行时,该对象将失去其引用。

当对象被销毁时,析构函数被自动调用,并且不能被显式调用。析构函数不能接受参数。

析构函数方法的声明格式如下:

Function _ _解构(){ //方法体,通常用于在对象销毁前完成一些清理任务}在以下情况下可能会调用析构函数(但不一定):

PHP页面加载后;Unset()类;当一个变量引用指向另一个对象或值时;PHP的内存回收机制与JAVA非常相似,在没有任何引用的情况下销毁和回收对象,采用引用计数器技术。示例:

?当对象被销毁时,将调用phpclastest { function _ _ destroy(){ echo }!';}}$a=$b=$c=新测试();$ a=null联合国索赔集(b美元);echo ' HR/';在这个例子中,如下图所示,有三个变量引用$a,$b,$c指向测试对象,测试对象有三个引用计数。当$a=null时,$a对测试对象的引用丢失,计数为-1,变成2。当$b未设置()时,$b对测试对象的引用也会丢失,计数为-1。

析构函数方法在PHP中不是很常见。它是类的可选部分,只有在必要时才会在类中声明。

?phpclass Person { var $ namevar $ sexvar $ agefunction __construct($name,$sex,$ age){ $ this-name=$ name;$ this-sex=$ sex;$ this-age=$ age;} function _ _ destroy () {echo '再见。$这个名字。br/';}}$person1=new Person('张三三','男',23);$ person1=null//第一个对象将失去引用$person2=new Person('李思思','女',17);$person3=new Person('王武武','男',43);运行结果:

再见张三三再见王五五再见李思思

第一个对象声明后,其引用被赋予空值,这样第一个对象的第一个丢失的引用就不能再被访问,然后自动调用第一个对象中的析构函数方法输出“再见张三三”。后面声明的两个对象都是在页面执行结束时丢失的引用,并且都自动调用析构函数方法。但是由于对象的引用都放在栈内存中,由于栈的后进先出特性,最后创建的对象会先释放,自动先调用第三个对象的析构函数方法,然后最后调用第二个对象的析构函数方法。

更多对PHP相关内容感兴趣的读者可以查看本网站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》、《php常见数据库操作技巧汇总》、0103010

希望本文对PHP编程有所帮助。

版权声明:详细说明PHP面向对象编程的构造方法和解构方法是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。