File: java.xml

package info (click to toggle)
phpdoc 20020310-1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 35,272 kB
  • ctags: 354
  • sloc: xml: 799,767; php: 1,395; cpp: 500; makefile: 200; sh: 140; awk: 51
file content (225 lines) | stat: -rwxr-xr-x 9,202 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- $Revision: 1.4 $ -->
 <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>
  <refentry id="function.java-last-exception-clear">
   <refnamediv>
    <refname>java_last_exception_clear</refname>
    <refpurpose>Efface la derni&egrave;re exception Java</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
     <methodsynopsis>
      <type>void</type><methodname>java_last_exception_clear</methodname>
      <void/>
     </methodsynopsis>
   </refsect1>
  </refentry>
  <refentry id="function.java-last-exception-get">
   <refnamediv>
    <refname>java_last_exception_get</refname>
    <refpurpose>Lit la derni&egrave;re exception Java</refpurpose>
   </refnamediv>
   <refsect1>
    <title>Description</title>
     <methodsynopsis>
      <type>exception</type><methodname>java_last_exception_get</methodname>
      <void/>
     </methodsynopsis>
    <para>
     L'exemple ci-dessous montre l'utilisation du gestionnaire d'exceptions
     java :
     <example>
      <title>Gestionnaire d'exception Java</title>
      <programlisting role="php">
&lt;?php
  $stack = new Java("java.util.Stack");
  $stack-&gt;push(1);
  // Cela doit marcher
  $result = $stack-&gt;pop();
  $ex = java_last_exception_get();
  if (!$ex) print "$result\n";
  // Cela doit &eacute;chouer (le rapport d'erreurs est supprim&eacute; par &#62;)
  $result = @$stack-&gt;pop();
  $ex = java_last_exception_get();
  if ($ex) print $ex-&gt;toString();
  // Efface la derni&egrave;re exception
  java_last_exception_clear();
?&gt;
      </programlisting>
     </example>
    </para>
   </refsect1>
  </refentry>
 </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:
-->