Heim >Backend-Entwicklung >PHP-Tutorial >Ausführliche Erklärung, wie Überladungsbeispiele für Funktionen und Konstruktoren in PHP implementiert werden
Da PHP eine schwach typisierte Sprache ist, kann der Eingabeparametertyp der Funktion nicht bestimmt werden (Typhinweise können verwendet werden, Typhinweise können jedoch nicht für Typen wie Ganzzahlen, Strings) verwendet werden und andere Skalartypen) und für eine Funktion sind beispielsweise nur 3 Eingabeparameter definiert, aber PHP gibt beim Ausführen des Aufrufs 4 oder mehr Parameter ein. Basierend auf diesen beiden Punkten ist es daher vorgesehen, dass Funktionen in PHP nicht überladen werden können (ähnlich wie Javascript-Sprachen) und dass es auch keine Konstruktoren der Überlastung.
Da die Implementierung von Funktionsüberladung sehr hilfreich ist, um die Entwicklungseffizienz zu verbessern, wäre es großartig, wenn sie wie C# oder C++ durchgeführt werden könnte. Tatsächlich bietet PHP einemagische Methode, einen gemischten Aufruf (String-Name, Array-Argumente). Diese Methode wird auch im php-Handbuch erwähnt. Laut offizieller Dokumentation kann diese Methode eine Funktionsüberladung erreichen. Wenn Sie eine Methode aufrufen, die im Objekt nicht vorhanden ist und die Methode call () definiert ist, wird die Methode aufgerufen. Zum Beispiel der folgende Code:
<?php class A { function call ( $name, $arguments ) { echo "call调用<br/>"; echo '$name为'.$name."<br/>"; print_r ($arguments); } } (new A)->test("test","argument"); ?>Das laufende Ergebnis ist: call call $name is testArray ( [0] => test [1] => argument )Sie müssen also nur diese magische Methode verwenden, um eine Funktionsüberladung zu erreichen. Der Code lautet wie folgt:
<?php class A { 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); } } } function f1($a1) { echo "1个参数".$a1."<br/>"; } function f2($a1,$a2) { echo "2个参数".$a1.",".$a2."<br/>"; } function f3($a1,$a2,$a3) { echo "3个参数".$a1.",".$a2.",".$a3."<br/>"; } } (new A)->f('a'); (new A)->f('a','b'); (new A)->f('a','b','c'); 输出如下: 1个参数a 2个参数a,b 3个参数a,b,cÄhnlich kann in PHP die Überladung von Konstruktoren nur auf flexible Weise implementiert werden. Das Schlüsselelement der Implementierung besteht darin, Eingabeparameter abzurufen und anhand der Eingabeparameter zu bestimmen, welche Methode aufgerufen werden soll. Das Folgende ist ein Beispielcode:
<?php class A { 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); } } function construct1($a1) { echo "1个参数".$a1."<br/>"; } function construct2($a1,$a2) { echo "2个参数".$a1.",".$a2."<br/>"; } function construct3($a1,$a2,$a3) { echo "3个参数".$a1.",".$a2.",".$a3."<br/>"; } } $o = new A('a'); $o = new A('a','b'); $o = new A('a','b','c'); ?>Führen Sie den Konstruktor aus
1 Parameter a
Führen Sie den Konstruktor aus
2 Parameter a,b
Führen Sie den Konstruktor aus
3 Parameter a, b, c
objektorientierte Sprachen, in PHP nicht instanziiert werden, wenn der Konstruktor auf privat oder geschützt gesetzt ist. .
Das obige ist der detaillierte Inhalt vonAusführliche Erklärung, wie Überladungsbeispiele für Funktionen und Konstruktoren in PHP implementiert werden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!