Vollständige Version anzeigen : [PHP] Funktionen überladen


3ounder
24.12.2006, 18:21

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

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

ueberladen("eins");

?>


als auch dieser Aufruf erlaubt.

<?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

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

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:

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.

Hardware Preisvergleich | Amazon Blitzangebote!

Videos zum Thema
Video Loading...
Ähnliche Themen zu [PHP] Funktionen überladen
  • [C/C++] operator überladen
    aloha, ich versuche gerade das thema überladen von operatoren hinter mir zu bringen. ich weiß, dass es zwei arten von überladen von op. gibt. die eine ist das mit friend, und die andere über methoden. ich verstehe leider nicht ganz, wie man mit der methodefunktion die operatoren überla [...]

  • akku überladen?
    hi letztens hat mich nen kumpel gefragt ob ich mein akku ausm laptop rausnehme wenn er voll ist und ich über netzteil laufen habe weil der sich ja sonst überlebt und so schneller das zeitliche segnet.... ich weiß, dass das früher mal probelmatisch war aber ist es das heute immernoch? ich meine [...]

  • [C/C++] Überladen von Operatoren
    Hey, ein Teil von einer Aufgabe von mir ist folgende: * Überladen Sie die Multiplication zweier tlv_float * Variables gemäß der entsprechenden Regel auf * der Seite 8 des Skripts Newton_AD;pdf * (1 Punkt) */ tlv_float operator*(const tlv_float& x1, const tlv_float& x2) Die [...]

  • Überladen
    Überladen - Fun Videos bei iSNiCHWAHR~de (;;;isnichwahr~de/r64982269-Ueberladen;html) rofl der arme esel [...]



raid-rush.ws | Imprint & Contact pr