Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung objektorientierter polymorpher Beispiele in PHP

Detaillierte Erläuterung objektorientierter polymorpher Beispiele in PHP

小云云
小云云Original
2018-03-17 09:26:241217Durchsuche

Dieser Artikel gibt Ihnen hauptsächlich eine detaillierte Erklärung von Beispielen für objektorientierten Polymorphismus in PHP. Polymorphismus bezieht sich auf die Fähigkeit, die Art und das Verhalten einer Klasse entsprechend dem Kontext der objektorientierten Verwendung der Klasse neu zu definieren oder zu ändern. PHP unterstützt keine Überladung, um Polymorphismus zu erreichen, aber PHP kann polymorphe Effekte in verschiedene Richtungen erzielen.

lautet wie folgt:

class a{    function test($i){ // $i可以是任何类型的变量
        print_r $i;
    }
}

Aus dem obigen Beispiel ist ersichtlich, dass $i jede Art von Variable sein kann. Eine Funktion kann leistungsstarke Funktionen wie Java implementieren. Eine Form des Polymorphismus in Typsprachen, die Methoden durch Ändern von Parametertypen überlädt.

Dieses Formular ist bequemer und effizienter als die Überladung von Parametertypen in JAVA, weist jedoch auch folgende Probleme auf:

<?php/**
教师类有一个drawPolygon()方法需要一个Polygon类,用来画多边形,此方法内部调用多边形的draw()方法,但由于弱类型,我们可以传入Circle类,就会调用Circle类的draw方法,这就事与愿违了。甚至可以传入阿猫、阿狗类,如果这些类没有draw()方法还会报错。*/class Teacher{    function drawPolygon($polygon){ 
        $polygon->draw(); 
    }    
}class Polygon{    function draw(){        echo "draw a polygon";
    }
}class Circle{    function draw(){        echo "draw a circle";
    }
}?>

Es ist ersichtlich, dass ein solcher flexibler Polymorphismus eine gewisse Kontrolle erfordert Mit PHP5.3 können Sie wie folgt Typbeschränkungen für Parameter festlegen:

// 仿java,在变量参数前加一个限制类名
    function drawPolygon(Polygon $polygon){ 
        $polygon->draw(); 
    }

Dies beschränkt nur die Übergabe von Polygon und seinen Unterklassen.

Es gibt auch eine Überladung, die die Anzahl der Parameter ändert. Dies liegt auch daran, dass PHP keine Methodenüberladung unterstützt, daher sind einige alternative Methoden erforderlich, um sie zu implementieren, wie folgt:

<?php// 通过可变参数来达到改变参数数量重载的目的
// 不是必须传入的参数,必须在函数定义时赋初始值function open_database($DB, $cache_size_or_values=null, $cache_size=null)
{    switch (function_num_args())  
// 通过function_num_args()函数计算传入参数的个数,根据个数来判断接下来的操作   
 {        case 1:            
 $r = select_db($DB);           
  break;        case 2:           
   $r = select_db($DB, $cache_size_or_values);           
    break;        case 3:           
     $r = select_db($DB, $cache_size_or_values, $cache_size);            
     break;
    }    return is_resource($r);
}?>

Verwandte Empfehlungen:

Einführung in die objektorientierte Vererbung, den Polymorphismus und die Kapselung von PHP

PHP-Polymorphismus und dynamische Bindung

Ein Fall der Implementierung einer objektorientierten Polymorphismusmethode in PHP

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung objektorientierter polymorpher Beispiele in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn