构造和析构
构造方法和析构方法
构造方法
实例化对象
在得到对象时,几乎都需要,对对象属性进行初始化,而且都是一样的操作,在一个操作中完成初始化,然后对该方法进行多次调用!
调用该方法初始化:
<?php
class BaseClass {
function __construct() {
print "In BaseClass constructor\n";
}
}
class SubClass extends BaseClass {
function __construct() {
parent::__construct();
print "In SubClass constructor\n";
}
}
class OtherSubClass extends BaseClass {
// inherits BaseClass's constructor
}
// In BaseClass constructor
$obj = new BaseClass();
// In BaseClass constructor
// In SubClass constructor
$obj = new SubClass();
// In BaseClass constructor
$obj = new OtherSubClass();
?>
再前进一步:
是否可以在实例化后,自动调用该初始化的方法!
Php的oop机制,在new完成时,会试着调用一个叫做 __construct()的方法。如果我们将初始化的代码,写到这个方法内,就可以完成自动初始化!
该方法,在通过类实例化对象,也叫构造对象时,被自动调用的,常常用于初始化对象,这个方法被叫做 构造方法:(此方法,就是比普通方法多了一个自动调用的功能)
由于不用去调用这个构造方法,如何传参?
在实例化时,通过在类名后,增加实参列表的形式,为构造方法传参:
此时,需要注意,实例化时,类名后,可以增加括号,取决于,该对象的构造方法,是否需要参数,如果不需要,则可以省略,或者是一个空括号。 如果需要则一定要有括号,括号内是实参列表:
需要:
构造方法的兼容性问题:
PHP5,构造方法的名字,就是__construct()。在php5之前,构造方法名字为与类同名。为了兼容,也同时支持这个与类同名的构造方法:
如果同时出现,如何处理?
先__construct(),后 Student
找,__construct,
先Student(),后 __construct
找__construct,有一个不标准的错误提示
下面的写法比较常见:
析构方法
在对象消失(对象被销毁时),也会自动执行一个方法,称之为析构方法!
析构方法名字为 __destruct();
也会自动被调用!
该方法,用于释放对象所占用的额外资源,不是对象本身的内存空间!
什么情况下,对象会被销毁:
1, 脚本周期结束,自动销毁,几个对象销毁几次。
2, 销毁保存该对象的变量时:
3, 保存对象的变量,被赋值了其他数据。
任何新值都可以,甚至是原来类的新对象。都会导致原对象被销毁!
常见是使用null,表示销毁对象的含义!
$stu = null;