mirror of
https://github.com/php/doc-de.git
synced 2026-03-24 15:22:14 +01:00
git-svn-id: https://svn.php.net/repository/phpdoc/de/trunk@78306 c90b9560-bf6c-de11-be94-00142212c4b1
171 lines
6.2 KiB
XML
171 lines
6.2 KiB
XML
<?xml version="1.0" encoding="iso-8859-1"?>
|
|
<reference id="ref.java">
|
|
<title>Java</title>
|
|
<titleabbrev>PHP / Java Integration</titleabbrev>
|
|
<partintro>
|
|
<para>
|
|
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.
|
|
</para>
|
|
<para>
|
|
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
|
|
<filename>php4/ext/java/README</filename>.
|
|
<example>
|
|
<title>Zugriff auf Java Klassen aus PHP heraus</title>
|
|
<programlisting role="php">
|
|
<?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'));
|
|
?>
|
|
</programlisting>
|
|
</example>
|
|
<example>
|
|
<title>Zugriff auf Java AWT aus PHP heraus</title>
|
|
<programlisting role="php">
|
|
<?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();
|
|
?>
|
|
</programlisting>
|
|
</example>
|
|
|
|
Notes:
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
<literal>new Java()</literal> 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.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
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 <literal>print $date.time</literal> als
|
|
<literal>$date.getTime()</literal> zu interpretieren, danach erst wird
|
|
<literal>$date.time</literal> versucht werden.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
Der Zugriff auf statische und Instanzeigenschaften erfolgt mit der selben
|
|
Syntax.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
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:
|
|
|
|
<itemizedlist>
|
|
<listitem><simpara><function>java_last_exception_get</function></simpara></listitem>
|
|
<listitem><simpara><function>java_last_exception_clear</function></simpara></listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
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.
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
<para>
|
|
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 <filename>php4/sapi/README</filename>.
|
|
|
|
Bemerkungen:
|
|
|
|
<itemizedlist>
|
|
<listitem>
|
|
<simpara>
|
|
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.
|
|
</simpara>
|
|
</listitem>
|
|
<listitem>
|
|
<simpara>
|
|
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.
|
|
</simpara>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</partintro>
|
|
|
|
&reference.java.functions;
|
|
|
|
</reference>
|
|
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"../../../manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
-->
|
|
|