浅谈PHP面向对象编程(三、构造方法和析构方法)

时间:2022-08-22 21:21:46

3.0 构造方法和析构方法

从我之前的博客可以发现,实例化一个类的对象后,如果要为这个对象的属性赋值,需要直接访问该对象的属性。如果想要在实例化对象的同时就为这个对象的属性进行赋值,则可以通过构造方法来实现。构造方法是类的一个特殊成员,它会在类实例化对象时自动调用,用于对类中的成员进行初始化。与构造方法对应的是析构方法,它在对象销毁之前被自动调用。用于完成清理工作。本节将针对构造方法和析构方法进行详细讲解。

3.1 构造方法

 在每个类中,都有一个构查方法,在创建对象时会被自动调用。如果在类中没有显式声明它,PHP会自动生成一一个没有参数、且没有任何操作的默认构造方法。当在类中显式声了构造方法时默认构造方法将不存在。声明构造方法和声明成员方法类似,其语法格式如下 
 修饰符 function __construct(参数列表){
//初始化操作
}

在上述语法格式中.需要注意的是构造方法的名称必须为  __construct 修饰符可以省略默认为pablic.接下来通过一个案例来学习构造方法的使用,如例3-6所示。

  <?php
class Person{
public $name;//成员属性$name,存储姓名
public $age; //成员属性$age,存储年龄
//声明一个构造方法,将来创建对象时,为对象的成员属性赋予初始值
function __construct($name,$age){
//使用传入的参数$name为成员属性$this->name赋初值
$this->name = $name;
//使用传入的参数$age为成员属性$this->age赋初值
$this->age = $age;
}
function show(){
echo $this->name.' = '.$this->age;
}
}
$p1 = new Person("kimi",9);
$p1->show();
?>

运行结果

浅谈PHP面向对象编程(三、构造方法和析构方法)

例3-6中,通过构造方法实现了在创建对象的同时给对象中的属性赋值的功能。在第6-11行代码中声明了Person 类的构造方法,用于初始化$name和$age属性。在第16行代码中,创建Person对象$p1时调用构造函数,从而完成对象的初始化。 最后在第12行代码调用了$p1的show()方法,输出初始化的结果。
值得一提的是,在PHP5之前的版本中,构造方法名和类名相同,这种方式在PHP5中仍然可以使用,但应该尽量将构造方法命名为_ _construcet0. 其优点是可以使构造方法独立于类名,当类名发生变化时不需要更改相应的构造方法名称。为了向下兼容,创建对象时,如果一个类中没有名为_ _constuct()的构造方法,PHP将寻找与类名同名的构造方法执行,如果找不到,则执行默认的空构造方法。

注意:
(1)构造方法没有返回值。
(2)构造方法的作用是完成对新对象的初始化,并不是创建对象本身。
(3)在创建新对象后,系统会自动调用该类的构造方法。不需要手动调用。
(4)一个类有且只有一个构造方法,在PHP5后虽然_ construct()和类名()可以共存,但只能使用一个。
(5)构造方法和普通方法一样,可以访问类属性和方法,也有访问控制修饰符,还可以被其他方法调用

3.2 析构方法
析构方法是PHIPS中新添加的内容。它在对象销毁之前会被自动调用,用于释放内存。其语法格式具体如下:

 function __destruct(){

       //清理操作
}

但需要注意的是,析构方法的名称必须为 __destruct(),且析构方法中不带任何参数,接下来通过案例来深入了解析构方法的使用。

例3-7

  <?php
class Person{
public function show(){
echo "大家好,我是Person类的对象<br>";
}
//声明析构方法,在对象销毁前自动调用
function __destruct(){
echo "对象被销毁";
}
}
$p1 = new Person();
$p1->show();
?>

运行结果

浅谈PHP面向对象编程(三、构造方法和析构方法)

在例3-7中,第7-9行代码定义了Person 类的析构方法。在程序结束前,会销毁创建的$p1对象,此时会调用$p1的析构方法,井在浏览器中输出” 对象被销毁。

多学一招:垃圾回收

在PHP中使用了一种“垃圾回收”机制。即自动清理不再使用的对象,释放内存,析构方法也会自动被调用。所以在一般情况下不需要手动调用析构方法,只需明确析构方法的在何时被调用的即可。

浅谈PHP面向对象编程(三、构造方法和析构方法)的更多相关文章

  1. 浅谈PHP面向对象编程(九、设计模式)

    9.0 设计模式 在编写程序时经常会遇到一此典型的问题或需要完成某种特定需求,设计模式就是针对这些问题和需求,在大量的实践中总结和理论化之后优选的代码结构编程风格,以及解决问题的思考方式. 设计模式就 ...

  2. 浅谈python面向对象编程和面向过程编程的区别

    面向过程:分析出解决问题所需要的步骤,然后用函数把这些步骤一步步实现,使用的时候再一个个的依次调用即可. 优点:性能高 缺点:相较于面向对象而言,不易维护,不易复用,不易扩展 适合于小型的项目面向对象 ...

  3. 浅谈PHP面向对象编程(二、基础知识)

    和一些面向对象的语言有所不同,PHP并不是一种纯面向对象的语言,包PIP它支持面向对象的程序设计,并可以用于开发大型的商业程序.因此学好面向对象输程对PHP程序员来说也是至关重要的.本章并针对面向对象 ...

  4. 浅谈PHP面向对象编程(一、简介)

    传统的面向过程 将要完成的工作,分作若干个步骤,或再细分为子步骤,然后后步骤从前往后一步一步完成,最初达致目标. 现代的面向对象 将要完成的工作拆分为“一个一个对象”的任务(功能),每个对象独自完成自 ...

  5. 浅谈PHP面向对象编程(八、多态)

    8.0  多态 在设计一个成员方法时,通常希望该方法具备一定的通用性.例如要实现一个动物叫的方法,由于每个动物的叫声是不同的,因此可以在方法中接收-个动物类型的参数的对象当传人猫类对象时就发出猫类的叫 ...

  6. 浅谈PHP面向对象编程(七、抽象类与接口)

    7.0 抽象类与接口 当定义一个类时,常常需要定义一些方法来描述该类的行为特征.但有时这些方法的实现方式是无法确定的,此时就可以使用抽象类和接口. 抽象类和接口用于提高程序的灵活性.抽象类是一种特殊的 ...

  7. 浅谈PHP面向对象编程(六、自动加载及魔术方法)

    6.0 自动加载及魔术方法  6.1 自动加载 在PHP开发过程中,如果希望从外部引入一个class.通常会使用incluae和requre方法把定义这个class的文件包含进来.但是,在大型的开发项 ...

  8. 浅谈PHP面向对象编程(五、继承)

    5.0 继承 5.1 继承的概念 在现实生活中,继承一般指的是子女继承父辈的财产.在程序中,继承描述的是事物之间的所属关系,通过继承可以使许多事物之间形成一种关系体系 . 例如猫和狗都属于动物,程序中 ...

  9. 浅谈PHP面向对象编程(四、类常量和静态成员)

    4.0 类常量和静态成员 通过上几篇博客我们了解到,类在实例化对象时,该对象中的成员只被当前对象所有.如果希望在类中定义的成员被所有实例共享. 此时可以使用类常量或静态成员来实现,接下来将针对类常量和 ...

随机推荐

  1. Swing中弹出对话框的几种方式&lowbar;JOptionPane&period;showMessageDialog等详解

    Swing中弹出对话框的几种方式_JOptionPane.showMessageDialog等详解   在swing中,基于业务的考量,会有对话框来限制用户的行为及对用户的动作进行提示. Swing中 ...

  2. Java基础知识

    1.java中的短路与(&&).短路或(||) 与 逻辑与(&).逻辑或(|)有什么区别啊? 最佳答案 &是java中的位逻辑运算: eg: 2&3=2: 分析 ...

  3. ural 1252&period; Sorting the Tombstones

    1252. Sorting the Tombstones Time limit: 1.0 secondMemory limit: 64 MB There is time to throw stones ...

  4. &sol;proc&sol;uptime详解

    From:http://smilejay.com/2012/05/proc_uptime/ 在Linux中,我们常常会使用到uptime命令去看看系统的运行时间,它与一个文件有关,就是/proc/up ...

  5. 自适应游标共享技术01&lpar;Adaptive Cursor Sharing&rpar;

    什么是ACS(adaptiver cursor sharing) Oracle通过绑定变量技术解决了SQL语句硬解析过多的问题,降低了资源的争用.但是绑定变量在引入cursor sharing,增加了 ...

  6. Objective-c单例模式详解

    转载自:http://www.jianshu.com/p/85618bcd4fee 单例模式出现以后,关于它的争执就一直存在.在开发项目中,有很多时候我们需要一个全局的对象,而且要保证全局有且仅有一份 ...

  7. 脱机BT transmission

    脱机BT transmission http://192.168.1.1:9091 也可以在使用Transmission Remote软件进行管理,如果下载太慢检查QoS 如果开了防火墙,需要打开默认 ...

  8. bzoj 1901&colon; Zju2112 Dynamic Rankings&lpar;树套树&rpar;

    1901: Zju2112 Dynamic Rankings 经典的带改动求区间第k小值问题 树套树模板,我是用的线段树套splay实现的,并且用的数组模拟的,所以可能空间略大,bzoj过了,zoj过 ...

  9. 【css】盒子模型 之 弹性盒模型

    参考: http://caibaojian.com/flexbox-guide.html 待补充啊

  10. CodeChef - AMLEX-Poetic word

    题目链接  Dhinwaji is an acclaimed poet and likes to play with words and letters. He has bought some sti ...