2018PHP春招面試--百度一面(電面)總結
阿新 • • 發佈:2018-12-30
過載: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
);
}
}