Heim >php教程 >php手册 >Methodenüberladung (Umschreiben)/Methodenabdeckung, Implementierung magischer Funktionen

Methodenüberladung (Umschreiben)/Methodenabdeckung, Implementierung magischer Funktionen

WBOY
WBOYOriginal
2016-10-24 00:00:001795Durchsuche


Methodenüberladung
Die Funktionsnamen sind unterschiedlich. Die Anzahl oder Parametertypen der Funktion sind unterschiedlich, sodass derselbe Funktionsname aufgerufen werden kann, aber verschiedene Funktionen unterschieden werden können
Klasse A{.
public function test1(){
echo "test1";}
public function test1($a){
echo "test1 hhh";}
}


Überladen
$a=newA();
$a->test1();
$a->test1(222);

Die obige Verwendung ist falsch

Implementierung zur Überladung magischer Funktionsmethoden

Klasse A{
öffentliche Funktion test1($p){
echo "Akzeptiert einen Parameter";}
öffentliche Funktion test1($p){
echo "Akzeptiert zwei Parameter";
🎜>Stellen Sie einen __call bereit
__call ist ein Objekt, das eine bestimmte Methode aufruft. Wenn die Methode nicht vorhanden ist, ruft das System automatisch die __call
Funktion __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->test(1);

$a->test(1,2);

Magische Funktionen

__set,__get,__construct,__destruct,__call,__isset,__unset

__LINE__Wie viele Zeilen werden ausgegeben

,__FILE__Name der Ausgabedatei

,__DIR__,
__CLASS__Name der Ausgabeklasse

Methodenüberschreibung/Methodenüberlastung (Überladung)


class Animal{

public $name;
protected $price;
function cry(){
echo "Weiß nicht";}

}

class Dog erweitert Animal{

//override
function cry(){
echo "puppy";}
}
class Pig erweitert Animal{
//Override
function cry(){
echo "Little Pig";}
}

$dog1=new Dog();

$dog1->cry();

$pig=1new Pig();
$pig1->cry();
? >

Über das Umschreiben:

Wenn eine übergeordnete Klasse weiß, dass alle Unterklassen eine Methode haben, die übergeordnete Klasse jedoch nicht sicher ist, wie die Methode geschrieben werden soll, kann sie die Unterklasse diese Methode überschreiben lassen

1 Um das Umschreiben zu implementieren , der Name der Methode der Unterklasse muss genau mit der Parameterliste übereinstimmen, die Parameternamen müssen jedoch nicht identisch sein
2. Wenn die Unterklasse den Aufruf einer Methode der übergeordneten Klasse (öffentlich) erfordert /protected), Sie können den Namen der übergeordneten Klasse:: Methodenname (Parameter ...), den Namen der übergeordneten Klasse:: Methodenname (Parameter ...)
verwenden. 3. Bei der Implementierung der Methodenabdeckung können die Zugriffsmodifikatoren unterschiedlich sein. Sie müssen jedoch den Zugriffsbereich der Unterklasse>= Zugriffsbereich der übergeordneten Klasse
erfüllen

Wo spiegelt sich Polymorphismus wider?

Wenn die Unterklasse die Methode der übergeordneten Klasse nicht überschreibt, ruft $call->cry() die übergeordnete Klasse auf und die Unterklasse überschreibt die Methode der übergeordneten Klasse und nennt sich selbst Cry( )

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