重写和重载的区别:详细介绍(构造重载)
重载:1、在使用重载时只能通过相同的方法名、不同的参数形式实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样);
2、不能通过访问权限、返回类型、抛出的异常进行重载;
3、方法的异常类型和数目不会对重载造成影响;
使用__call方法:
function
__call (
$name
,
$args
)
{
if
(
$name
==
'f'
)
{
$i
=
count
(
$args
);
if
(method_exists(
$this
,
$f
=
'f'
.
$i
)) {
call_user_func_array(
array
(
$this
,
$f
),
$args
);
}
}
}
重写:
1.当一个父类和子类有一个方法,参数和名字完全一致,那么子类方法会覆盖父类的方法。
必须参数一致,才会实现方法覆盖。当参数个数不一致,则会报错(这就牵扯到上面说所得方法重载)。当方法名字不一致,就不会覆盖,只是子类新定义的方法。
使用__construct():实现构造函数的重载:
function
__construct()
{
echo
"执行构造函数<br/>"
;
$a
= func_get_args();
//获取构造函数中的参数
$i
=
count
(
$a
);
if
(method_exists(
$this
,
$f
=
'__construct'
.
$i
)) {
call_user_func_array(
array
(
$this
,
$f
),
$a
);
}
}