Files
doc-fr/reference/java/reference.xml
Hartmut Holzgraefe b8daeaab85 banana-split
git-svn-id: https://svn.php.net/repository/phpdoc/fr/trunk@78204 c90b9560-bf6c-de11-be94-00142212c4b1
2002-04-15 00:40:38 +00:00

179 lines
7.5 KiB
XML

<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.1 $ -->
<reference id="ref.java">
<title>Java</title>
<titleabbrev>Int&eacute;gration de Java</titleabbrev>
<partintro>
<para>
Il y a deux moyens de connecter PHP et Java : soit en int&eacute;grant
Java directement dans PHP, ce qui est la solution la plus stable et
la plus efficace, ou en int&eacute;grant PHP dans un environnement de
Servlet Java. La premi&egrave;re solution est fournie par cette extension
Java, et la derni&egrave;re par le module SAPI qui s'interface avec
un serveur de Servlet.
</para>
<para>
PHP 4 ext/java fournit un moyen simple mais efficace pour invoquer et
cr&eacute;er des objets Java, depuis PHP. Une machine virtuelle est
cr&eacute;&eacute;e via JNI,
et le tout fonctionne avec des processus fils. Les instructions d'installation
pour cette extension sont sont disponibles dans le fichier :
<filename>php4/ext/java/README</filename>.
<example>
<title>Exemple avec Java</title>
<programlisting role="php">
&lt;?php
// cr&eacute;e une instance de Java class java.lang.System en PHP
$system = new Java("java.lang.System");
// acc&egrave;de aux propri&eacute;t&eacute;s
print "Java version=".$system-&gt;getProperty("java.version")." &lt;br&gt;";
print "Java vendor=" .$system-&gt;getProperty("java.vendor")." &lt;br&gt;";
print "OS=".$system-&gt;getProperty("os.name")." ".
$system-&gt;getProperty("os.version")." on ".
$system-&gt;getProperty("os.arch")." &lt;br&gt;";
// Exemple avec java.util.Date
$formatter = new Java("java.text.SimpleDateFormat",
"EEEE, MMMM dd, yyyy 'at' h:mm:ss a zzzz");
print $formatter-&gt;format(new Java("java.util.Date"));
?&gt;
</programlisting>
</example>
<example>
<title>Exemple AWT</title>
<programlisting role="php">
&lt;?php
// Cet exemple ne fonctionne qu'en mode CGI.
$frame = new Java("java.awt.Frame", "Zend");
$button = new Java("java.awt.Button", "Bonjour au monde Java!");
$frame-&gt;add("Nord", $button);
$frame-&gt;validate();
$frame-&gt;pack();
$frame-&gt;visible = true;
$thread = new Java("java.lang.Thread");
$thread-&gt;sleep(10000);
$frame-&gt;dispose();
?&gt;
</programlisting>
</example>
Notes:
<itemizedlist>
<listitem>
<simpara>
<literal>new Java()</literal> cr&eacute;e une nouvelle instance d'une classe,
si un constructeur valable est disponible. Si aucun param&egrave;tre n'est pass&eacute;,
et le constructeur par d&eacute;faut est utile pour acc&eacute;der &agrave; ces classes
telles que "java.lang.System", qui fournissent leur fonctionnalit&eacute;s via
des m&eacute;thodes statiques.
</simpara>
</listitem>
<listitem>
<simpara>
Lors de l'acc&egrave;s aux membres d'une instance, PHP commencera par rechercher
les membres Bean, puis les champs publics. En d'autres termes,
"<literal>print $date.time</literal>" sera d'abord r&eacute;solu par
"<literal>$date.getTime()</literal>", puis par "<literal>$date.time</literal>";
</simpara>
</listitem>
<listitem>
<simpara>
Les membres statiques et d'instance sont accessibles avec la m&ecirc;me
syntaxe. De plus, si un objet est de type "<literal>java.lang.Class</literal>",
les membres statiques de la classe (champs et m&eacute;thodes) sont accessibles.
</simpara>
</listitem>
<listitem>
<para>
Les exceptions sont transform&eacute;es en alertes PHP, et r&eacute;sultat NULL.
Les alertes peuvent &ecirc;tre supprim&eacute;es en pr&eacute;fixant l'appel
par l'op&eacute;rateur <literal>&#62;</literal>. Les fonctions suivantes
peuvent &ecirc;tre utilis&eacute;es pour lire et effacer la derni&egrave;re
erreur remont&eacute;e :
<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>
Les surchargements de fonctions sont des probl&egrave;mes &eacute;pineux,
&eacute;tant donn&eacute; les diff&eacute;rences de type de valeurs entre les deux
langages. L'extension Java de PHP utilise une m&eacute;trique simple
mais efficace pour d&eacute;terminer la meilleur fonction &agrave; utiliser.
</simpara>
<simpara>
De plus, les noms de m&eacute;thodes ne sont pas sensibles &agrave; la casse en
PHP, ce qui augmente le nombre de conflits potentiels.
</simpara>
<simpara>
Une fois qu'une m&eacute;thode est s&eacute;lectionn&eacute;e, les param&egrave;tres sont
transtyp&eacute;s, avec une perte d'information potentielle non n&eacute;gligeable
(par exemple, les nombres &agrave; virgules flottante en double pr&eacute;cisions
seront convertis en bool&eacute;en).
</simpara>
</listitem>
<listitem>
<simpara>
Traditionnellement en PHP, les tableaux et les tables de hashage peuvent
&ecirc;tre interchang&eacute;es, et fonctionnent de la m&ecirc;me fa&ccedil;on.
Notez que les tables de hashage de PHP ne peuvent &ecirc;tre index&eacute;es
qu'avec des entiers ou des cha&icirc;nes, et que le type primitif de
tableau de Java ne peut comporter de trous dans les index. Notez aussi
que les valeurs sont pass&eacute;es par
valeur, ce qui peut &ecirc;tre co&ucirc;teux en m&eacute;moire et en temps.
</simpara>
</listitem>
</itemizedlist>
</para>
<para>
L'interface PHP4 sapi/servlet est construite sur un m&eacute;canisme d&eacute;fini
par l'extension Java, qui permet &agrave; PHP d'&ecirc;tre ex&eacute;cut&eacute;
comme une servlet. L'avantage imm&eacute;diat d'un point de vue PHP est que les
serveurs web qui supportent les servlets g&egrave;rent rigoureusement les
machines virtuelles. Les instructions d'installation du module Servlet SAPI
sont disponibles dans le fichier <filename>php4/sapi/README</filename>.
Notes:
<itemizedlist>
<listitem>
<simpara>
Bien que ce code soit pr&eacute;vu pour fonctionner sur n'importe quel
serveur &agrave; Servlet, il n'a &eacute;t&eacute; test&eacute; qu'avec le module Apache
Jakarta/tomcat (jusqu'&agrave; aujourd'hui). Les remont&eacute;es de bugs, les
r&eacute;ussites et les patches n&eacute;cessaires pour faire fonctionner ce code
sur d'autres serveurs sont fortement encourag&eacute;s!
</simpara>
</listitem>
<listitem>
<simpara>
PHP a l'habitude de changer le dossier de travail. Le serveur SAPI/Servlet
le changera &agrave; nouveau, mais tant que PHP fonctionnera, le moteur de servlet
ne pourra pas charger de classes dans le CLASSPATH, si le dossier est
sp&eacute;cifi&eacute; avec un chemin relatif, ou ne pourra pas trouver le dossier
d'administration et de compilation des t&acirc;ches JSP.
</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:
-->