Andreas Korthaus: cannot redeclare funktion(), Fehler gefunden

Beitrag lesen

Hi Tom!

Bei der impliziten Deklaration von Mehrdimensionalen Arrays darf keines der Elemente in der Dimensionskette mit einem Skalar vorbelegt gewesen sein.

$person["koerperteil"]["bein"][0]["links"]="zu kurz"; ist möglich.
Wenn aber ein Skalar durch
$person["koerperteil"]="keine"; vorher in das Element geschreiben wurde, funktioniert die obige implizite Neudeklaration nicht mehr. Es gibt dann äußerst ungewöhnliche Ergebnisse. Man kann das Problem durch zwischenzeitliches Überschreiben mit dem richtigen Typ beseitigen.

$person["koerperteil"]="keine";
...
$person["koerperteil"]=array();
$person["koerperteil"]["bein"][0]["links"]="zu kurz"; // nun gehts

Was absolut logisch ist, da Du versuchst ein Element eines Arrays zu verändern, welches es defintiv nicht gibt!


PHP kennt keine Subfunktionen, also Funktionen, die nur Eigentum einer anderen Funktion sind. Alle deklarierten Funktionen sind im gesamten Script erreichbar. Ich habe aber auch bisher nichts darüber gefunden, dass es verboten wäre, trotzdem welche zu schreiben. Das erschien mir manchmal wegen der Zuordnung zu den Funktionen ganz sinnvoll.

Allerdings kann man dann eine solche Funktion mit Subfunktion nur ein einziges Mal im Script aufrufen. Bei der zweiten Verwendung erhält man den beschriebenen Fehler:

cannot redeclare <subfunction()> at zeilennummer in script....

Darauf muss man erst einmal kommen, dass eine Funktion, die einmal geht, kein zweites Mal funktioniert.

In Manual steht das Funktionsnamen nur einmal vorkommen dürfen. Wenn man sich daran hält gibt es IMHO keine Probleme. Wenn ich Funktionen kapseln will verwende ich Klassen. Mit :: lassen sich die Funktionen ja auch aufrufen ohne die Klasse vorher zu instanzieren.

Aufrufen  kann an Funktrionen IMHO so oft man will. Wie sieht das Code-technisch aus das Du eine Funktion nur einmal aufrufen kannst?

Grüße
Andreas