• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

PHP: Parameter-Übergabe an Funktion, die Variablenausgabe aus der Funktion scheitern

pee

New member
Hallo,

zwecks besserer Übersichtlichkeit möchte ich wenige Zeilen prozedurale Programmierung in eine Funktion auslagern.

Der prozedurale Teil:
Code:
if(!isset($opening)) {
		$newPulldowns1 = '<br />'.$obj->Gruppe.': <select name="auswahl" size="0"><option></option>';
			} elseif ($lastGroup !== $obj->Gruppe) {
				$newSelect = '</select><br /><br />'.$obj->Gruppe.': <select name="auswahl" size="0"><option></option>';
			}

Die Funktion:
Code:
function getGroupOpening($group=null, $lastGroup=null, $opening=null) {
		if(!isset($opening)) {
			$newPulldowns1 = '<br />'.$group.': <select name="auswahl" size="0"><option></option>';
					return $newPulldowns1;
			} elseif ($lastGroup !== $group) {
				$newSelect = '</select><br /><br />'.$group.': <select name="auswahl" size="0"><option></option>';
				return $newSelect;
				}			
}

Das Problem ist nun, dass die Parameter laut der Fehlermeldung von PHP nicht vorhanden sind:

Notice: Undefined variable: lastGroup in /var/www/ivsys/media/content/konfigurator-request.php on line 48

Notice: Undefined variable: opening in /var/www/ivsys/media/content/konfigurator-request.php on line 48

und auch die Variablenwerte per return nicht aus der Funktion ausgegeben werden:

Notice: Undefined variable: newSelect in /var/www/ivsys/media/content/konfigurator-request.php on line 61

Notice: Undefined variable: newPulldowns2 in /var/www/ivsys/media/content/konfigurator-request.php on line 61

Notice: Undefined variable: newSelect in /var/www/ivsys/media/content/konfigurator-request.php on line 61

Notice: Undefined variable: newSelect in /var/www/ivsys/media/content/konfigurator-request.php on line 61

Obwohl ich im Funktionskopf Default-Werte definiert habe:

Code:
function getGroupOpening($group=null, $lastGroup=null, $opening=null) {

Es kann doch nicht sein, dass ich an dieser prinzipiell simplen Problemstellung scheitere. Ist jemand von euch bitte so nett und spendet Rat?

lg
 
AW: PHP: Parameter-Übergabe an Funktion, die Variablenausgabe aus der Funktion scheit

Ok, habs jetzt selber gelöst. Nur eine Variable kann per return weiter gegeben werden. Es muss ein Array genutzt werden. Trotzdem danke an alle Leser.
 
AW: PHP: Parameter-Übergabe an Funktion, die Variablenausgabe aus der Funktion scheit

return fürht dazu, das die aktuelle Funktion beendet wird und zu dem aufrufenden Code zurückgekehrt wird. Alles was danach in der Funktion steht wird also nicht aufgerufen, auch keine weiteren return-Anweisungen.
 
AW: PHP: Parameter-Übergabe an Funktion, die Variablenausgabe aus der Funktion scheit

Meines Wissens nach ist return die einzige gängige Möglichkeit, Variablen-Werte aus einer Funktion an den aufrufenden Code zu senden.
 
AW: PHP: Parameter-Übergabe an Funktion, die Variablenausgabe aus der Funktion scheit

Gängiger ist heutzutage mit Objekten zu arbeiten, dann hat man das Problem nicht.
 
AW: PHP: Parameter-Übergabe an Funktion, die Variablenausgabe aus der Funktion scheit

Nein, kann ich nicht, da ich kein (bzw. kaum) PHP kann. Ausserdem ist das kein Thema, welches sich mal kurz an einem Beispiel zeigen läßt. Aber im Internet gibt es viele Quellen zum Thema OOP
 
AW: PHP: Parameter-Übergabe an Funktion, die Variablenausgabe aus der Funktion scheit

Meines Wissens nach ist return die einzige gängige Möglichkeit, Variablen-Werte aus einer Funktion an den aufrufenden Code zu senden.

Wenn du Parameter als Referenz übergibst, sind die Änderungen auch außerhalb der Funktion sichtbar (http://de3.php.net/manual/en/functions.arguments.php). Würde ich jedoch mit Vorsicht einsetzen, da es der allgemeinen Erwartung widerspricht und daher leicht mal zu längerem Suchen nach dem Fehler führen kann.

Gängiger ist heutzutage mit Objekten zu arbeiten, dann hat man das Problem nicht.
Das stimmt so pauschal nicht. Es kann ja immer noch sein das die Funktion mehrere Objekte zurückgeben soll. In diesem Fall ist man dann wieder auf einen "Kontainer" angewiesen. Ob das nun eine extra dafür erstellte Klasse ist, oder nen Array macht ja nicht so den Unterschied.

Zu Objekt Orientierung findest du auf Wikipedia mal einen Überblick (die englische Version ist um einiges detailierter). Auch die PHP Doku hat ein eigenes Kapitel zu OO, man sollte aber den Grundgedanken hinter OO verstanden haben, bevor man sich hinsetzt und anfängt seine Klassen zu schreiben.
 
AW: PHP: Parameter-Übergabe an Funktion, die Variablenausgabe aus der Funktion scheit

Grundgedanken hinter OO verstanden haben, bevor man sich hinsetzt und anfängt seine Klassen zu schreiben.

Der Grundgedanke hinter der OOP ist wohl, dass der Zugriff auf Programmteile einfacher ist. Und man auf in sich abgeschlossene Programmteile zurückgreifen kann. Bei der prozeduralen Programmierung hat man etwas Zugsammengewürfeltes.

Mir hat man ein Java-Experte erzählt, dass OOP so funktioniert, wie auch das menschliche Denken funktioniert. Bäcker macht Brötchen, Metzger mach Fleisch - Klasse A bzw. Methode B tut dies und das. Und nicht Kleinteil vom Bäcker macht Mehl drauf.. also die OOP ist meines Erachtens keine »Mikroprogrammierung« - wie die prozedurale. Korrigiert mich ruhig, wenn ich etwas Falsches poste. :)

@ ein schlauer:
Du meintest auch ganz was anderes. Mir ging es einfach um die Weitergabe eines Variablenwertes. ^^
 
AW: PHP: Parameter-Übergabe an Funktion, die Variablenausgabe aus der Funktion scheit

@ ein schlauer:
Du meintest auch ganz was anderes. Mir ging es einfach um die Weitergabe eines Variablenwertes. ^^
Nein, ich meinte nichts anderes. Wenn du das Bedürfnis hast mehrere Werte zurück zugeben, dann hängen diese offensichtlich miteinander zusammen. Und wenn Dinge miteinander zu tun haben, lassen sie sich am einfachsten in einem Objekt handhaben. Wenn sie nicht zusammenhängen, dann ist das Konzept deiner Funktion falsch.
 
AW: PHP: Parameter-Übergabe an Funktion, die Variablenausgabe aus der Funktion scheit

Der Grundgedanke hinter der OOP ist wohl, dass der Zugriff auf Programmteile einfacher ist. Und man auf in sich abgeschlossene Programmteile zurückgreifen kann. Bei der prozeduralen Programmierung hat man etwas Zugsammengewürfeltes.
Das ist nicht wirklich der Grundgedanke, sondern eher ein Ziel/Folge von OO.

Mir hat man ein Java-Experte erzählt, dass OOP so funktioniert, wie auch das menschliche Denken funktioniert. Bäcker macht Brötchen, Metzger mach Fleisch - Klasse A bzw. Methode B tut dies und das.
Das ist der Grundgedanke
 
Zurück
Oben