XLVII. Java

Es gibt zwei Wege , um die Welten von Java und PHP zu verbinden . Einerseits besteht die Möglichkeit PHP in eine Java Servlet Umgebung zu integrieren , andererseits kann man mit der Java Extension aus PHP heraus auf Java Klassen zugreifen . Die erste der beiden genannten Möglichkeit ist wesentlich stabiler und performanter als die zweitgenannte Lösung .

Die Java Erweiterung für PHP nutzt das Object Overloading von PHP 4 um auf Java Klassen zuzugreifen . Die Java Virtual Machine ( JVM ) wird hierbei über das Java Native Interface (JNI ) erzeugt . Eine detaillierte Installationsbeschreibung entnehmen Sie bitte der Datei php4 / ext / java / README .

Beispiel 1 . Zugriff auf Java Klassen aus PHP heraus

 
?php

 
/

 
/

 
In

 
PHP

 
Instanz

 
der

 
Java

 
Klasse

 
java.lang.System

 
erzeugen

 
$system

 
=

 
new

 
Java(

 
'java.lang.System')

 
;

 
/

 
/

 
Zugriff

 
auf

 
die

 
Objekteigenschaften

 
print

 
'Java

 
version='.$system

 
-

 
getProperty('java.version')

 
.

 
'

 
br

 
'

 
;

 
print

 
'Java

 
vendor=

 
'

 
.$system

 
-

 
getProperty('java.vendor')

 
.

 
'

 
br

 
'

 
;

 
print

 
'OS='.$system

 
-

 
getProperty('os.name')

 
.

 
'

 
'

 
.

 
$system

 
-

 
getProperty('os.version')

 
.

 
'

 
on

 
'

 
.

 
$system

 
-

 
getProperty('os.arch')

 
.

 
'

 
br

 
'

 
;

 
/

 
/

 
java.util.Date

 
Beispiel

 
$formatter

 
=

 
new

 
Java('java.text.SimpleDateFormat'

 
,

 
"EEEE

 
,

 
MMMM

 
dd

 
,

 
yyyy

 
'at

 
'

 
h:mm:ss

 
a

 
zzzz")

 
;

 
print

 
$formatter

 
-

 
format(new

 
Java('java.util.Date'))

 
;

 
?



Beispiel 2 . Zugriff auf Java AWT aus PHP heraus

 
?php

 
/

 
/

 
Dieses

 
Beispiel

 
kann

 
nur

 
als

 
CGI

 
ausgeführt

 
werden

 
.

 
$frame

 
=

 
new

 
Java(

 
'java.awt.Frame'

 
,

 
'PHP')

 
;

 
$button

 
=

 
new

 
Java('java.awt.Button'

 
,

 
'Hallo

 
Java

 
Welt

 
!')

 
;

 
$frame

 
-

 
add('North'

 
,

 
$button)

 
;

 
$frame

 
-

 
validate()

 
;

 
$frame

 
-

 
pack()

 
;

 
$frame

 
-

 
visible

 
=

 
True

 
;

 
$thread

 
=

 
new

 
Java('java.lang.Thread')

 
;

 
$thread

 
-

 
sleep(10000)

 
;

 
$frame

 
-

 
dispose()

 
;

 
?



Notes:
  • new Java( ) erzeugt eine Instanz der angegebenen Java Klasse , falls ein geeigneter Konstruktur gefunden wird . Für den Zugriff auf Klassen mit statischen Methoden benötigt man keinen Parameter .

  • Beim Zugriff auf Mitglieder ( Members ) einer Instanz wird zunächst nach Bean Eigenschaften gesucht , danach erst nach öffentlichen (public ) Eigenschaften . Mit anderen Worten : Es wird zuerst versucht werden , zum Beispiel print $date.time als $date.getTime( ) zu interpretieren , danach erst wird $date.time versucht werden .

  • Der Zugriff auf statische und Instanzeigenschaften erfolgt mit der selben Syntax .

  • Das Auslösen einer Java Exception resultiert in einer PHP Warnung und einem NULL Ergebnis . Folgende Funktionen ermöglichen den Zugriff auf die eigentlichen Exceptions :



  • Traditionell können Arrays und Hashes in PHP weitestgehend als gleichwertig angesehen werden . Beim Austausch dieser Datentypen zwischen PHP und Java ist zu beachten , dass Hashes in PHP nur mit Integer - und Stringwerten indiziert werden können und Arrays von primitiven Datentypen in Java nicht dünn besetzt sein dürfen . Ferner ist zu beachten , dass diese Datenstrukturen by-Value übergeben werden , was ungünstig in Bezug auf Speicher - und Zeitbedarf sein kann .



Das PHP 4 Servlet SAPI Modul baut auf dem von der Java Extension zur Verfügung gestellten Mechanismus auf , allerdings wird der PHP Prozessor hierbei von einer Servlet Engine , wie zum Beispiel Apache Jakarta / Tomcat , ausgeführt . Dies führt zu einer wesentlich höheren Stabilität und besserer Performance als der umgekehrte Weg , wie in die Java Extension an sich anbietet . Dies kommt daher , dass die Servlet Engine sich um das Pooling und die Wiederverwendung von Java Virtual Machines ( JVMs ) kümmert . Eine detaillierte Anleitung zur Integration von PHP in eine Servlet Engine entnehmen Sie bitte der Datei php4 / sapi / README . Bemerkungen :

  • Das Servlet SAPI Modul sollte zwar auf jeder Java Servlet Engine funktionieren , wurde aber bislang nur in Verbindung mit Apache Jakarta / Tomcat getestet . Meldungen von Problem - aber auch von Erfolgserlebnissen - bei der Verendung mit anderen Servlet Engines werden dankbar aufgenommen .

  • PHP hat die Angewohnheit das aktuelle Arbeitsverzeichnis ( CWD ) zu ändern . sapi / servlet wird versuchen , den alten Zustand wieder herzustellen . Während PHP läuft kann es sein , dass die Servlet Engine kann Klassen aus dem CLASSPATH finden kann , die über relative Pfade angesprochen werden .



Inhaltsverzeichnis
java_last_exception_clear -- Letzte Java Exception freigeben
java_last_exception_get -- Letzte Java Exception holen