1 __construct、__destruct
__construct 构造方法,当一个对象创建时调用此方法,使用此方法的好处是:可以使构造方法有一个独一无二的名称,无论它所在的类的名称是什么.这样你在改变类的名称时,就不需要改变构造方法的名称
class
Person
{
public
$name
;
public
$age
;
public
$sex
;
/**
* 显示声明一个构造方法且带参数
*/
public
function
__construct(
$name
=
""
,
$sex
=
"男"
,
$age
=22)
{
$this
->name =
$name
;
$this
->sex =
$sex
;
$this
->age =
$age
;
}
/**
* say 方法
*/
public
function
say()
{
echo
"我叫:"
.
$this
->name .
",性别:"
.
$this
->sex .
",年龄:"
.
$this
->age;
}
}
定义构造函数的时候,通过__construct方法自己对类的属性进行自动的初始化,这样不管类名怎么更改,类属性的初始化都
能不受影响。
需要注意的是
1、在同一个类中只能声明一个构造方法,原因是,PHP不支持构造函数重载。
2、构造方法名称是以两个下画线开始的__construct()
__destruct 析构方法,PHP将在对象被销毁前(即从内存中清除前)调用这个方法
默认情况下,PHP仅仅释放对象属性所占用的内存并销毁对象相关的资源.
析构函数允许你在使用一个对象之后执行任意代码来清除内存.
当PHP决定你的脚本不再与对象相关时,析构函数将被调用.
在一个函数的命名空间内,这会发生在函数return的时候.
对于全局变量,这发生于脚本结束的时候.如果你想明确地销毁一个对象,你可以给指向该对象的变量分配任何其它值.通常将变量赋
值勤为NULL或者调用unset.
<?php
class
Person{
public
$name
;
public
$age
;
public
$sex
;
public
function
__construct(
$name
=
""
,
$sex
=
"男"
,
$age
=22)
{
$this
->name =
$name
;
$this
->sex =
$sex
;
$this
->age =
$age
;
}
/**
* say 说话方法
*/
public
function
say()
{
echo
"我叫:"
.
$this
->name.
",性别:"
.
$this
->sex.
",年龄:"
.
$this
->age;
}
/**
* 声明一个析构方法
*/
public
function
__destruct()
{
echo
"我觉得我还可以再抢救一下,我的名字叫"
.
$this
->name;
}
}
$Person
=
new
Person(
"小明"
);
unset(
$Person
);
//销毁上面创建的对象$Person
2 __call() 方法的作用
为了避免当调用的方法不存在时产生错误,而意外的导致程序中止,可以使用 __call() 方法来避免。
该方法在调用的方法不存在时会自动调用,程序仍会继续执行下去。
<?php
class
Person
{
function
say()
{
echo
"Hello, world!<br>"
;
}
/**
* 声明此方法用来处理调用对象中不存在的方法
*/
function
__call(
$funName
,
$arguments
)
{
echo
"你所调用的函数:"
.
$funName
.
"(参数:"
;
// 输出调用不存在的方法名
print_r(
$arguments
);
// 输出调用不存在的方法时的参数列表
echo
")不存在!<br>\n"
;
// 结束换行
}
}
$Person
=
new
Person();
$Person
->run(
"teacher"
);
// 调用对象中不存在的方法,则自动调用了对象中的__call()方法
$Person
->eat(
"小明"
,
"苹果"
);
$Person
->say();
__call()方法,能够自己生成构造为定义的方法。