PHPでは、PHPは弱いデータ型であり、署名を適切に区別できないため、同じメソッド名と異なる署名を持つメソッドによるメソッドオーバーロードを直接実装することはできません。ただし、PHPクラスで__Call()メソッドを使用して、メソッドオーバーロードを実装できます。クラスに存在しないメソッドが呼び出された場合、__Call()メソッドは自動的に呼び出されます。これは__Call($ name、$ arguments)の形式です。ここで、$ nameはメソッドの名前であり、$引数は配列型パラメーターです。
次の例は、PHPメソッドオーバーロードを使用して、Get Methodと設定を動的に作成することです。 (オブジェクト指向プログラミングでは、クラスのプロパティはGet and Setを使用して割り当てられますが、30などのクラスに多すぎるプロパティがある場合は、メソッドの過負荷を使用しない場合は、30セットの方法と30のGETメソッドを書き込み、独自にゆっくりと書きます...)
コードコピーは次のとおりです。
<?php
クラスの人
{
private $ name;
プライベート$ age;
プライベート$アドレス;
私立$学校;
Private $ PhoneNum;
パブリック関数__call($ method、$ args)
{
$ perfix = strtolower(substr($ method、0,3));
$ property = strtolower(substr($ method、3));
if(empty($ perfix)|| empty($ property))
{
戻る;
}
if($ perfix == "get" && isset($ this-> $ property)))
{
$ this-> $プロパティを返します。
}
if($ perfix == "set")
{
$ this-> $ property = $ args [0];
}
}
}
$ p = new person();
$ p-> setName( 'lvcy');
$ P-> SETAGE(23);
$ p-> setAddress(chengdu);
$ p-> setschool( 'uestc');
$ p-> setphonenum( '123456');
echo $ p-> getname()。 '// n';
echo $ p-> getage()。 '// n';
echo $ p-> getAddress()。 '// n';
echo $ p-> getSchool()。 '// n';
?>
この問題は、各プロパティのGETセットメソッドを作成するのではなく、__Call()メソッドで簡単に解決できます。