Ankündigung

Einklappen
Keine Ankündigung bisher.

Programmbibliothek in PHP einbinden

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Programmbibliothek in PHP einbinden

    Hallo,

    ich frage mich, wie man geschickt programmiersprachen-übergreifend (Java und PHP) eine gemeinsame geteilte Core API haben kann?

    Mir ist bekannt, dass man DLL oder SO Programmbibliotheken nur in Form von PHP Extension einbinden kann. Auf Java Seite auch nur mittels JNI (Java Native Interface). Das wird also eher nicht mein präferierter Weg sein.

    Ich suche eine Möglichkeit, mit der ich komfortabel auf verschiedenen Betriebssystemen und Plattformen eine gemeinsame Bibliothek einbinden kann. Die Bibliothek, also die Core Logik der Applikation soll dabei in PHP und Java gleichermaßen gut nutzbar sein.

    Mein Vorschlag einziger Vorschlag bisher wäre das in JAR(s) zu packen, denn ich erinnere mich, dass es bereits zu Zeiten von Zend Framework 1 schon eine Zend_JAR_Bridge Klasse bzw. Funktionalität gab.

    Hat jemand da eventuell bessere Vorschläge? Ein Webservice kommt leider nicht in Frage, weil man das auch lokal standalone ausführen können soll. Also muss es eine Art Bibliothek werden.


    MFG

    derwunner


  • #2
    Ein Webservice kommt leider nicht in Frage, weil man das auch lokal standalone ausführen können soll.
    Ist doch egal, wo der Webserver läuft, Hauptsache der lauscht auf einem eigenen Port.
    You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.

    Kommentar


    • #3
      Zitat von chorn Beitrag anzeigen

      Ist doch egal, wo der Webserver läuft, Hauptsache der lauscht auf einem eigenen Port.
      Ok, gehe ich prinzipiell mit. Aber in einer Standalone App, wo der Webserver aus einem Java Thread heraus gestartet wird, welcher dann PHP interpretieren kann, wäre etwas Overkill. Vorallem müsste ich die PHP Binaries immer mit liefern in der App.
      Vielleicht wäre es doch besser alles in NodeJS zu machen und dann für die Desktop / Android App React oder Angular Native zu nehmen?!

      Kommentar


      • #4
        Gibt auch noch Electron für Desktop Apps geschrieben in JS/TS .
        https://electronjs.org/

        Kommentar


        • #5
          derwunner Das klingt nach ganz großem Murks. Separiere doch lieber die Logiken voneinander und pack die in Services.

          Kommentar


          • #6
            xm22 Na genau so meinte ich das doch auch: Eine Core API, die alles wichtige enthält. Dann hat man bloß noch GUI Gebastel pro Programmiersprache / Plattform. Ähnlich wie bei einem Application Server: Die Core Logik befindet sich in einem oder mehreren JARs, bzw. EARs. Die Darstellung in einem Java EE Programm ist dann bisschen GUI Gedöns, was vom Server mit Daten gefüllt wird. Die Webschnittstelle nimmt sich auch die Daten aus dem JAR bzw. dem EAR Paket.
            Folglich hast du immer die gleiche Logik für verschiedene Darstellungszwecke. Zum Beispiel Desktop App, Smartphone App, Webseite, mobile Webseite etc..

            Definiere mal bitte genauer, was du mit Services meinst?

            Kommentar


            • #7
              Oben meintest Du, dass Du Bibliotheken anderer Sprachen einbinden willst:

              geschickt programmiersprachen-übergreifend (Java und PHP) eine gemeinsame geteilte Core API haben kann
              schon eine Zend_JAR_Bridge Klasse bzw. Funktionalität
              Und das ist meiner Erfahrung nach kein guter Weg.

              Mit Services meinte ich in der Tat eine Komposition von Applikationen. Warum kannst Du nicht mehrere ausführen? Das hat ja meines Erachtens nach nichts mit Standalone zu tun.

              Kommentar


              • #8
                Zitat von xm22 Beitrag anzeigen
                Oben meintest Du, dass Du Bibliotheken anderer Sprachen einbinden willst:
                Es gibt keine Bibliotheken "anderer Sprachen". DLL Dateien, bzw. im Linux Umfeld SO Dateien sind Programmiersprachen unabhängig, die versteht das Betriebssystem direkt ohne weiteres, musst nur die Funktionalität darin aufrufen von außen. Das kann mit C#, Java, PHP, Perl, Ruby, was weiß ich was geschehen.
                Java bildet hier ein bisschen die Ausnahme, denn die haben ein eigenes Programmbibliotheken Format, welches man in der Regel nur von Java aus wieder ansprechen kann, nennt sich JAR.
                DLL Dateien sind Dateien, die man z. B. aus C# heraus erzeugen kann, bzw. besser gesagt in solche kompilieren kann. Nach dem Kompilieren sind sie aber unabhängig von irgendeiner Sprache, soviel ich weiß. Deswegen ja auch eingangs meine Frage, ob und wie das mit PHP möglich ist.

                Zitat von xm22 Beitrag anzeigen
                Mit Services meinte ich in der Tat eine Komposition von Applikationen. Warum kannst Du nicht mehrere ausführen? Das hat ja meines Erachtens nach nichts mit Standalone zu tun.
                Ok, das heißt du meinst App 1 greift auf App 2 zu und umgekehrt?

                Kommentar


                • #9
                  Das ist mit PHP nicht direkt möglich.
                  Um eine Shared Library oder DLL ansprechen zu können, müsstest du eine PHP Extension schreiben in der du einen Wrapper für die Funktionen bereitstellst.

                  xm22 meint eine SOA. Du lagerst Bestandteile (die du in mehreren Anwendungen brauchst) in Services aus. Die Anwendung (oder auch ein anderer Service) kommuniziert dann z.B. über HTTP, CORBA oder RPC/RFC mit dem Service.
                  "Software is like Sex, it's best if it's free." - Linus Torvalds

                  Kommentar


                  • #10
                    Ich denke das beste wäre, wenn ich es folgendermaßen machen würde:
                    Definition eines Interface für die Speicherung von Daten in Java, dann kann man je nach App Typ einfach die Klasse reinladen und gut ist. Dann habe ich vielleicht etwas Overhead durch die Speicherung in sqlite mit der Standalone Lösung, aber dann hat man auch eine Web API und es gibt vorallem nur eine App, die man entweder im Standalone Modus betreiben kann oder via Web API vom Server.
                    Die Web API bekommt halt dann noch eine Web GUI oben auf, falls man das mal im Browser abrufen will.

                    Damit habe ich mit Java die PC und Android App abgedeckt. Fast dieselbe Code Basis, die GUI wird sich nur etwas unterscheiden.

                    Kommentar


                    • #11
                      Warum überhaupt PHP und nicht gleich alles in Java?

                      Kommentar


                      • #12
                        Zitat von hellbringer Beitrag anzeigen
                        Warum überhaupt PHP und nicht gleich alles in Java?
                        Wäre eine Möglichkeit. Nur leider ist Java auf Webservern nicht so weit verbreitet und es ein openSource Tool werden soll, wäre wohl php besser geeignet als Webserver Sprache.

                        Kommentar


                        • #13
                          Wenn Du die App eh standalone laufen lassen willst, hast Du doch auch die Kontrolle, ob es Java gibt oder nicht.

                          opensource hat nichts mit der Sprache zu tun. Nimm die Sprache, die am besten passt.

                          EDIT: Das soll Dich nicht desillusionieren, aber zu 99,9% wird sich später niemand für Dein Open Source-Projekt interessieren - Von daher würde ich erst recht lieber auf etwas bauen, das dem Sinn entspricht und nicht, weil es irgendwie gehen könnte.

                          Kommentar

                          Lädt...
                          X