所谓构造方法,就是在创建对象时自动执行的方法,也就是说,当你new一个对象的时候,不管你访不访问它,它都会自动执行。它是可以带参数的哦。构造方法通常用来执行一些初始化任务。
构造方法的方法名称必须是 __construct ,注意前面是两个下划线,这是PHP5中的改进,在PHP4中,构造方法和其他语言一样,必须和类的名称相同,当然你要使用这种方式也可以,PHP5还是会认的,但是我不建议这么做,因为那样代码的可读性不强,而且万一某天你想修改类的名称时,你同时还得去修改构造方法的名称,因此我觉得PHP5这个小小的改进比其他语言显得更灵活些。
构造方法(建议使用)
class Role //角色类
{
function __construct(参数列表); //构造方法
{
……
}
}
构造方法(不建议使用)
class Role //角色类
{
function Role(参数列表); //构造方法
{
……
}
}
OK,我们来玩一下代码看看:
class Role //角色类
{
//属性部分
var $role_name; //角色的名字
var $role_sex; //角色的性别
var $role_skill; //角色的技能
//方法部分
function __construct($name,$sex,$skill) //构造方法,自动执行
{
$this->role_name = $name; //将参数传进来,给“姓名”属性一个初始值
$this->role_sex = $sex; //将参数传进来,给“性别”属性一个初始值
$this->role_skill = $skill; //将参数传进来,给“技能”属性一个初始值
echo $this->role_name.'横空出世了<br /><br />'; //如果这句话被输出,说明构造方法自动执行了
}
function roleTalk() //角色说话
{
echo $this->role_name.'说:'.'我是一个'.$this->role_sex.'人<br />'; //输出:(角色的名字)说:我是一个(角色的性别)人
}
function roleFight() //角色发招
{
echo $this->role_name.'使出了一招:'.$this->role_skill.'<br /><br />'; //输出:(角色的名字)使出了一招(角色的技能)
}
}
//实例化一个对象,同时将构造方法所需要的参数传入
$brother_chun = new Role('春哥','男','霸气菊花残');
//属性设置(因为我们我们已经在构造方法中给了属性初始值,所以不需要设置了)
//访问方法
$brother_chun->roleTalk();
$brother_chun->roleFight();
运行后我们可以得到以下结果:
春哥横空出世了
春哥说:我是一个男人
春哥使出了一招:霸气菊花残
我们可以看到第一句话“春哥横空出世了”被输出了,虽然我们并没有访问构造方法,这是因为构造方法在创建对象时就被自动执行了。
虽然我们并没有在类的外部设置属性,但是后两句话依然输出了“春哥”的姓名、性别和技能属性,因为我们在构造方法中给了它们一个初始值,这个初始值就是我们传入的参数。当然,在有已经初始值的情况下,我们依然可以在类的外部重新设置“春哥”的属性。
好了,构造方法我们就完到这里,现在来我们开始玩析构方法,析构方法和构造方法正好相反,也就是在销毁对象时自动执行的方法,它是不带参数的,WHY?因为new一个对象的时候,后面只有一个括号,所以参数只能一个方法,而构造方法相对来说更加有用,所以就传给它咯,而且它可以为析构方法提供所需要的初始值。因此析构也不需要参数。析构方法通常用来执行一些善后工作。
构造方法的方法名称必须是 __destruct,注意前面也是两个下划线,这里要强调一下,PHP中凡是以双下划线开头的东东都有特殊作用。析构方法也是PHP5中的新改进,但是PHP4中没有析构方法,所以请不要尝试在PHP4中使用析构方法,否则电脑爆炸,后果自负,呵呵。
析构方法
class Role //角色类
{
function __destruct(); //析构方法
{
……
}
}
那么结合前面的代码,我们把析构方法加进去,也来玩玩析构方法的代码吧:
class Role //角色类
{
//属性部分
var $role_name; //角色的名字
var $role_sex; //角色的性别
var $role_skill; //角色的技能
//方法部分
function __construct($name,$sex,$skill) //构造方法,自动执行
{
$this->role_name = $name; //将参数传进来,给“姓名”属性一个初始值
$this->role_sex = $sex; //将参数传进来,给“性别”属性一个初始值
$this->role_skill = $skill; //将参数传进来,给“技能”属性一个初始值
echo $this->role_name.'横空出世了<br /><br />'; //如果这句话被输出,说明构造方法自动执行了
}
function roleTalk() //角色说话
{
echo $this->role_name.'说:'.'我是一个'.$this->role_sex.'人<br />'; //输出:(角色的名字)说:我是一个(角色的性别)人
}
function roleFight() //角色发招
{
echo $this->role_name.'使出了一招:'.$this->role_skill.'<br /><br />'; //输出:(角色的名字)使出了一招(角色的技能)
}
function __destruct() //析构方法,自动执行
{
echo $this->role_name.'打完收招,只见天上的浮云组成了一个“纯”字'; //如果这句话被输出,说明析构方法自动执行了
}
}
//实例化一个对象,同时将构造方法所需要的参数传入
$brother_chun = new Role('春哥','男','霸气菊花残');
//属性设置(因为我们我们已经在构造方法中给了属性初始值,所以不需要设置了)
//访问方法
$brother_chun->roleTalk();
$brother_chun->roleFight();
运行后我们可以得到以下结果:
春哥横空出世了
春哥说:我是一个男人
春哥使出了一招:霸气菊花残春哥打完收招,只见天上的浮云组成了一个“纯”字
好啦,构造函数和析构函数我们就玩到这里!
作者:hetty 首发地址:http://www.im286.com/thread-4823948-1-1.html
版权所有,转载时必须以链接形式注明作者和原始出处及本声明:KingLife@无忧岛
本文链接: http://www.islandcn.com/post/772.html
近期评论