Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erklärung, wie Überladungsbeispiele für Funktionen und Konstruktoren in PHP implementiert werden

Ausführliche Erklärung, wie Überladungsbeispiele für Funktionen und Konstruktoren in PHP implementiert werden

伊谢尔伦
伊谢尔伦Original
2017-07-08 09:40:301636Durchsuche

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 eine

magische 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 &#39;$name为&#39;.$name."<br/>";
        print_r ($arguments);
    }
}
(new A)->test("test","argument");
?>
Das laufende Ergebnis ist:

call call

$name is test

Array ( [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==&#39;f&#39;)
        {
            $i=count($args);
            if (method_exists($this,$f=&#39;f&#39;.$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(&#39;a&#39;);
(new A)->f(&#39;a&#39;,&#39;b&#39;);
(new A)->f(&#39;a&#39;,&#39;b&#39;,&#39;c&#39;);
输出如下:
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=&#39;construct&#39;.$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(&#39;a&#39;);
$o = new A(&#39;a&#39;,&#39;b&#39;);
$o = new A(&#39;a&#39;,&#39;b&#39;,&#39;c&#39;);
?>
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

Übrigens kann das Objekt, genau wie C# und andere

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!

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