URL: https://www.overclockers.at/coding-stuff/php-5-4-released_224933/page_1 - zur Vollversion wechseln!
Here is an incomplete list of changes:
finally!Zitat von NicoRemoved features
- Safe mode and all related ini options. (Kalle)
- register_globals and register_long_arrays ini options. (Kalle)
- import_request_variables(). (Kalle)
- allow_call_time_pass_reference. (Pierrick)
Typehinting soll jz demnächst auch für integer gehen.
Vl gibt es wirklich mal richtige Datentypen in PHP
Und Mehrfachvererbung kommt auch
Dafür würde ich dem "Pierrick" gerne mit der Faust auf die Nase schlagen. Call Time Pass References können wunderschönen Code ergeben, den ich gerne nutze. Zum Beispiel wenn man einen Parameter mit Default-Wert oder Referenz in eine Funktion schleusen will. Das geht ohne diesem Switch dann nicht mehr.Zitat von NicoZitat von M4D M4Xeinfach den circle auswählen
ist immer noch möglichCode: PHPpublic function doSomething(&$val = 5) { }
Stimmt, das geht mittlerweile. In den ersten PHP5-Versionen ging das noch nicht. Aber ich bin sowieso grade draufgekommen, dass ich mein Framework sogar schon umgestellt habe ... habs einfach vergessen. Hach, es gibt nichts Schöneres, als unbewusst erledigte Arbeit.
Aber ein Problem gibt es doch, weshalb Call Time References eine gute Sache sind. Das hatte ich im Hinterkopf: Wenn man über die Magic-Funktion __call() in einer Klassen arbeitet, dann ist der Funktionsaufruf ja nicht vorab festgelegt. Dort funktionieren die Referenzen dann nicht mehr. Ich verwende das für ein Event-System und das ist durchaus praktisch, weil genial flexibel.
Gut die Funktion hab ich bisher noch nie verwendet daher trifft es mich jz nicht so :P
Aber sieht interessant aus... muss ich mir mal ansehen
Wenn du Objekte übergibst sind das sowieso Referenzen seit PHP5. Also ich denk das is weniger problematisch für dein Event-System, mat
Als langjähriger PHP-Programmierer, der vor einem Jahr angefangen hat sich in asp.net auf C# einzuarbeiten muss ich sagen ich will bestenfalls nie wieder PHP-Code schreiben oder warten
Ja, PHP hat die ungemütliche Eigenschaft sich von einer Template-Engine zu einer vollständigen Skriptsprache/Engine entwickelt zu haben. Und man merkts einfach.
Wenn man nur Objekte als Parameter für Events übergeben will, ist das korrekt. Aber das ist in der Praxis natürlich uninteressant.Zitat von watchoutWenn du Objekte übergibst sind das sowieso Referenzen seit PHP5. Also ich denk das is weniger problematisch für dein Event-System, mat
Wieso genau ist das in der Praxis uninteressant?Zitat von matWenn man nur Objekte als Parameter für Events übergeben will, ist das korrekt. Aber das ist in der Praxis natürlich uninteressant.
Ich hab das ganze jetzt so gelöst, dass ich die Referenzen innerhalb eines Arrays an die Funktion übergebe. Natürlich nicht direkt an den "fiktiven" Funktionsaufruf, der via _call() abgefangen wird, sondern direkt an die dahinterstehende Funktion, die sich dann um das Event-Bubbling kümmert.
Praxis:Zitat von watchoutWieso genau ist das in der Praxis uninteressant?
Nicht die Praxis, weil einfach zu mühsam und zu hohe Granularität und deshalb sinnlos:Code:protected function onValidateData($aData,&$bDataValid) { $bDataValid = is_array($aData); return true; }
Code:protected function onValidateData($oDataValidator) { $oDataValidator.validate(); return true; }
Wie wärs damit?Code: PHPclass mydatacontainer { function onValidate($callback) { if(!$this->foo) return $callback->bar("foobar!"); return true; } }
Event-Bubbling mit Member-Variablen halte ich für schwer lesbar bzw. musst sehr gut dokumentiert werden. Die Callback-Funktion erfüllt jetzt auch nicht das, was ich mir vorstelle. Denn ich will ja möglichst viel allgemeinen Code schon im Event-System bzw. in den Basisklassen belassen. Die Idee hinter meinem Event-System ist, dass du jederzeit ohne zu detailliertem Wissen deinen Code in den Applikationsablauf einbauen kannst.Zitat von watchoutWie wärs damit?Code: PHPclass mydatacontainer { function onValidate($callback) { if(!$this->foo) return $callback->bar("foobar!"); return true; } }
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025