[PHP] Funktionen überladen

Dieses Thema im Forum "Programmier Tutorials" wurde erstellt von 3ounder, 24. Dezember 2006 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 24. Dezember 2006
    Funktionen überladen

    PHP bietet seit Version 5 endlich die Möglichkeit, objektorientiert zu programmieren. Inzwischen sind wesentliche Bestandteile von OOP in PHP integriert worden. Aber ein Aspekt ist direkt leider nicht möglich. Das Überladen von Funktionen ist nur bedingt möglich.

    Überladen bedeutet, dass man mit der gleichen Funktion abhängig von Anzahl und Typ der Argumente unterschiedliche Operationen durchführt.

    Das Überladen der Anzahl ist möglich und schon länger Bestandteil auch ohne OOP.

    PHP:
    <? php

    function  ueberladen ( $arg1 $arg2  '' ) {  // anstatt von $arg2 = '' können auch Standardwerte übergeben werden
      
    if ( $arg2  ==  '' ) {
        echo 
    "Es wurde nur ein Parameter übergeben:  $arg1 " ;
      } else {
        echo 
    "Es wurden zwei Parameter übergeben:  $arg1  und  $arg2 ." ;
      }
    }

    ?>
    In diesem Fall ist sowohl dieser Aufruf
    PHP:
    <? php

    ueberladen
    ( "eins" );

    ?>
    als auch dieser Aufruf erlaubt.
    PHP:
    <? php

    ueberladen
    ( "eins" "zwei" );

    ?>
    Nun kommen wir zum Überladen mit Typabhängigkeit. Wir haben eine Klasse Zahl. In dieser Klasse ist ein Konstruktor definiert. Dieser kann sowohl mit einem Int-Wert als auch mit einem Objekt als Parameter aufgerufen werden. In diesem Fall müssen wir mit einer IF-Schleife arbeiten.

    PHP:
    <? php

    class  Zahl  {
      private 
    $number  0 ;   // Variable, in die der Übergabewert gespeichert werden soll

      
    function  __construct ( $arg ) {
        if(
    is_int ( $arg )) {
          
    $this -> number  $arg ;
        } else {
          
    $this -> number  $arg -> number ;
        }
      }
    }

    ?>
    Ist also eigentlich ganz einfach. Nun möchten wir aber zwischen zwei Klassen unterscheiden. Hierzu müssen wir eine eigene Funktion schreiben, die überprüft, ob es sich um ein Objekt der Klasse handelt.

    PHP:
    <? php

    function  is_Zahl ( $arg ) {
      if(
    $arg -> number ) {
        
    // Es ist ein Objekt der Klasse
      
    } else {
        
    // Es ist nicht vom Typ Zahl
      
    }
    }

    ?>

    <?php
    Zahl
    :: is_Zahl ( $arg );  // Funktionsaufruf ohne Instanz
    ?>
    Man nimmt sich einen Bestandteil der Klasse, der nur hier verfügbar ist, und fragt diesen ab. Ist er vorhanden, so ist es ein Objekt der entsprechenden Klasse. Man kann auch mehrere Eigenschaften überprüfen, aber das sollte mit Vorsicht genossen werden, da man sich ziemlich schnell in endlose IF-Schleifen verrennt.

    Kleiner Tipp:

    Übrigens kann der Funktionskopf auch folgender maßen deklariert werden:
    PHP:
    function  is_Zahl ( Zahl $arg ) { }
    Der Interpreter überprüft zwar nicht, ob es sich um den entsprechenden Typ handelt, aber es erhöht die Übersicht des Codes eindeutig.
     
  2. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.