hi,
Beide dieser Vorgehensweisen funktionieren im Grunde wohl gleich, sie sind anscheinend austauschbar, zumindest in diesem Normalfall:
$funktionsname = 'func'; $funktionsname();
$funktionsname = 'func'; call_user_func(funktionsname);
Ja, das stimmt wohl.
Bei beiden werden die Funktionsnamen als Strings »hartkodiert«.
Ja, aber so kann man sich doch zumindest im groben eine Ablaufsteuerung zusammenbasteln, in dem man die Namen der aufzurufenden Funktionen und Parameter in Datenstrukturen ablegt, vielleicht da auch noch definiert, wie auf das Ergebnis der Funktionen reagiert werden soll, etc. ... So "schön" wie in Javascript ist das natürlich nicht - in PHP würdest du damit eher noch eine weitere Meta-Ebene einziehen, auf der dann Logik liegt (und die dort vielleicht nicht so unbedingt hinpassen will).
Gut, ob ich wie in JavaScript nun func(handler) oder in PHP func('handler') schreibe, gibt sich wohl wenig.
Vom Schema her sicherlich vergleichbar.
In JavaScript wird aber alles naturgemäß über Events und Handler gesteuert, daher ist diese Praxis normal. In PHP scheint mir das eher verpönt
Die Ausrichtung ist ja auch eine andere - PHP ist nicht auf Events ausgerichtet, würde in dem Umfeld vielleicht auch weniger Sinn ergeben.
PHP macht "sein Ding", und liefert dann ein Ergebnis zurück. Im Normalfall hast du eine Anfrage vom Client, und PHP antwortet darauf - da hat man vermutlich weniger eine Notwendigkeit gesehen, auf irgendeine Art und Weise "Events" zu definieren, bzw. der Event _ist_ für PHP die Anfrage vom Client.
und das Übergeben einer nicht existierenden Funktion ergibt erst einen Fehler, wenn man sie aufrufen will (es sei denn, man baut darum noch einen Wrapper mit function_exists()).
Gut, das ist natürlich sprachspezifisch - weil PHP Funktionen/Methoden nicht als Referenzen handhabt wie Javascript, besteht da auch nicht die Möglichkeit, schon vor dem Aufruf auf Interpreter-Ebene darauf zu reagieren.
Außerdem sind in PHP gar nicht die ganzen spaßigen Dinge möglich, die durch Funktionsobjekte in JavaScript möglich sind: Ich kann nicht mal eben eine Methode eines Objektes als Handler angeben. Deshalb scheint es mir wenig erfolgsversprechend, meinen JavaScript-Programmierstil auf PHP zu übertragen... ;) In PHP bin ich solchen Fragen bisher immer durch ziemlichen Spaghetticode ausgewichen.
OOP ist unter PHP ja sowieso noch nicht so umfänglich implementiert - Javascript ist ja schon sehr früh daraufhin konzipiert worden, während man PHP das erst später "aufgepropft" hat.
In so fern darfst du wohl gar nicht erst mit der Erwartung herangehen, deinen gewohnten Javascript-Stil darauf übertragen zu können - weil PHP da (noch?) gar nicht alles leisten kann, was du von Javascript her kennst und dir vielleicht wünschst.
gruß,
wahsaga
/voodoo.css:
#GeorgeWBush { position:absolute; bottom:-6ft; }