Ist es möglich einen Browser in PHP zu programmieren?
Auf die Frage, in welcher Programmiersprache Internet-Browser geschrieben sind, ist die häufigste Antwort C++, bei Mozilla mit einem zunehmenden Anteil an Rust, usw. Nun sind CMS-Systeme häufig in PHP programmiert, z.B. Wordpress. Wäre es da nicht naheliegend, PHP auch für die Programmierung von Browsern zu verwenden? Was steht dem entgegen?
7 Antworten
Möglich ist es definitiv.
Du kannst in PHP auch Funktionen aus nativen Bibliotheken verwenden (siehe dazu auch: https://readthedocs.org/projects/php-native-interface/), damit wären z.B. auch sämtliche Funktionen von GTK, QT, usw... verwendbar.
Zur Frage, ob es nicht naheliegend wäre: Nein, das wäre es nicht. Es wäre mit PHP um einiges aufwändiger und ineffizienter. Das steht dagegen, nicht etwa wie es hier von einigen Leuten behauptet wurde, dass es nicht möglich wäre...
auf der CLI wäre einen ziemlich eingeschränkter Textbrowser möglich... das war es dann aber schon
Wenn man sich unbedingt auf CLI beschränken will, dann kommt das hin.
Aber warum sollte man das tun (mal abgesehen davon, dass es aus anderen Gründen unsinnig wäre)?
alles grafische kannst du vergessen, du hast keine Möglichkeit auf der CLI Grafiken auszugeben. Dafür ist PHP nicht gemacht, PHP liefert bestenfalls die Grunddaten (aufbereitete Grafiken) an etwas anderes aus, die Anzeigeroutinen müssen auf einer anderen Sprache laufen. PHP könnte auf der CLI als eine art Proxy dienen der Daten für ein Javaprogramm abruft und abändert. Das ist das höchste der Gefühle :)
Also die Programmierer von Content Management Systemen setzen durchweg auf PHP. Und grafische Oberflächen sind bei CMS ein Muss! Ich glaube nicht, dass man dies vergessen kann.
die grafische oberfläche wird aber im Browser gebildet... php liefert nur rohdaten aus, stellt sie aber nicht selbst da. Der Browser ist nicht in PHP programmiert
Möglich mit absurden Verrenkungen und einer unfassbaren Menge Zeit. Wahrscheinlicher ist aber, dass du in der selben Zeit ein Mittel gegen Krebs findest.
PHP wird auf Servern ausgeführt und dient der Dynamisierung von Webseiten. Du könntest jetzt auch schlussfolgern, dass es ja nur Sinn machen würde den Nagel mit einem anderen Nagel in die Wand zu hauen. Der Schluss ist aber falsch, man nimmt für jede Aufgabe das richtige Werkzeug.
Und Browser-Engines sind nun wirklich monströse Software-Projekte. Niemand hat Bock darauf mit so einer Guffelsprache etwas derart komplexes umzusetzen.
Also so abwegig ist das nicht. Und gab einige sehr interessante Projekte, PHP als Programmiersprache für Desktop anwendungen zu verwenden.
Projekte findest du hier. Weitere am Schluss der Seite.
https://en.wikipedia.org/wiki/PHP-GTK?wprov=sfla1
Leider nur Englisch.
Diese haben aber in die PHP Community oder bei Zend nie Eingang in den Sprachkern gefunden.
PHP fehlt eine ganze Reihe von Fähigkeiten, die absolut notwendig sind, um einen Browser in halbwegs performant hinzubekommen: Zeiger, IPC, echte Arrays, und sehr sehr viel mehr.
Kurze Frage: In PHP gibt es einfache (indizierte) Arrays, assoziative Arrays und multidimensionale Arrays. Was sind 'unechte Arrays'? Hängt die Anmerkung mit dem Umstand zusammen, dass Arrays in PHP unterschiedliche Datentypen enthalten können?
PHP kennt gar keine richtigen Arrays, sondern nur einen Container, der intern eine ganze Müllhalde an Datenstrukturen beherbergt.
Da sind Bäume, Listen, Maps, Sets uvm. enthalten.
In PHP heißen diese Dinger zwar "Array", sind in Wirklichkeit aber mehr so etwas wie optional assoziative Deques.
Warum PHP hier nicht ordentlich getrennte Container mit nur einem Bruchteil des Speicherfußabdrucks anbietet, erschließt sich mir nicht.
PHPs angebliche Arrays sind das beste Beispiel für das Antipattern einer Gott-Klasse.
Python kennt zwar ebenfalls keine Arrays, aber das schmerzt kaum, da es eine Vielzahl von sauber getrennten leichgewichtigen aber dennoch mächtigen Containern bzw. Collections gibt.
>>> import array
>>> array.__doc__
'This module defines an object type which can efficiently represent\nan array of basic values: characters, integers, floating point\nnumbers. Arrays are sequence types and behave very much like lists,\nexcept that the type of objects stored in them is constrained.\n'
Zumindest als Modul in der Stdlib gibt es typisierte Arrays, nichts anderes als C Arrays mit etwas Wrappingmagie ;-).
Njajaja, also unter Array verstehe ich schon etwas anderes.
Diese Pythonarrays würde ich eher mit std::vector von C++ vergleichen, und dann auch nur für primitiv Typen und nich mal PODs.
Außerdem liegen die immer auf dem Heap und die Initialisierung ist nich wirklich effizient, was aber sowieso keine Rolle spielt, da Python.
An sich heißt das zwar Array, ist aber keins. Einen Arraywrapper, der diesen Namen auch verdient, findest du ebenfalls bei C++ als std::array.
Ist aber auch egal, da man bei Skriptsprachen ja sowieso eher selten in die Verlegenheit kommt, so etwas zu benötigen. Es sei denn, mann will einen Webbrowser schreiben. :)
Ja, es kommt eher dem std::vector gleich, wobei es unterm Strich wirklich C-Arrays sind und direkt dessen Typen nutzt. Entsprechend ist der 'Type Qualifier' auch abhängig von der C-Implementierung.
Sie sind aber für indizierten Zugriff by numerischen Typen (z.B. Char arrays als Buffer) schon deutlich performanter als die List - der Preis ist der Verlust verschiedene Typen mischen zu können.
Ein Array auf dem Stack (Damit meine ich nicht dem Python Stack) sind ohnehin illusorisch, das stimmt schon.
Die Idee mit CLI ist nicht schlecht, aber ich denke da geht noch mehr. Danke für den Tip.