メソッドのオーバーロード
関数名が異なります。関数の数やパラメータの型が異なるため、同じ関数名を呼び出すことができますが、異なる関数を区別できます
class A{
public function test1(){
echo "test1" ;}
public function test1($a){
echo "test1 haha";}
}
オーバーロード
$a=newA();
$a->test1();
$a->test1(222);
上記の使用法は間違っています
マジック関数メソッドのオーバーロード実装
class A{
public function test1($p){
echo "1つのパラメータを受け入れる";}
public function test1($p){
echo "2つのパラメータを受け入れる";}
}
は__call
__callを提供しますメソッドを呼び出すオブジェクトで、そのメソッドが存在しない場合、システムは自動的に __call
function __call($method,$p){
var_dump($p);
if($method=="test1"){
if(count($p)==1){
$this->test1($p);
}else if(count ($p)==2){
$this->test2($p);
}
}
}
$a=newA();
$a->テスト(1);
$a->テスト(1,2);
マジック関数
__set、__get、__construct、__destruct、__call、__isset、__unset
__LINE__ 出力行数
、__FILE__ 出力ファイル名
、__DIR__、
__CLASS__ 出力クラス名
メソッド書き換え/メソッド上書き(オーバーロード)
class Animal{
public $name;
protected $price;
function cry(){
echo "わからない";}
}
クラス Dog extends Animal{
//オーバーライド
function cry(){
echo "puppy";}
}
class Pig extends Animal{
//override
function cry(){
echo "pig" ;}
}
$dog1=新しい犬();
$dog1->泣き();
$pig=1新しい豚();
$pig1->泣き();
?>
書き換えについて:
すべてのサブクラスにメソッドがあることが親クラスでわかっているが、そのメソッドの書き方がわからない場合、サブクラスにこのメソッドをオーバーライドさせることができます
1. 書き換えを実装するには、サブクラスの名前が必要です。そのメソッドのメソッドはパラメーター リストとまったく同じですが、パラメーター名が同じである必要はありません
2. サブクラスが親クラス (public/protected) のメソッドを呼び出す必要がある場合は、parent:: メソッドを使用できます。名前 (パラメータ...)、親クラス名:: メソッド名 (パラメータ...)
3. メソッド カバレッジを実装する場合、アクセス修飾子は異なっていてもかまいませんが、サブクラスのアクセス スコープ >= アクセスを満たす必要があります。親クラスのスコープ
ポリモーフィズムはどこに反映されますか?
サブクラスが親クラスのメソッドをオーバーライドしない場合、$call->cry() は親クラスを呼び出します。 )