mirror of
https://github.com/sigmasternchen/php-doc-en
synced 2025-03-16 00:48:54 +00:00
New structure applied to java extension docs, and added some more
info to it (short installation and cofiguration info). git-svn-id: https://svn.php.net/repository/phpdoc/en/trunk@89467 c90b9560-bf6c-de11-be94-00142212c4b1
This commit is contained in:
parent
37f4826021
commit
0527a9afa2
2 changed files with 171 additions and 125 deletions
|
@ -1,25 +1,67 @@
|
|||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- $Revision: 1.2 $ -->
|
||||
<!-- $Revision: 1.3 $ -->
|
||||
<reference id="ref.java">
|
||||
<title>Java</title>
|
||||
<titleabbrev>PHP / Java Integration</titleabbrev>
|
||||
<title>PHP / Java Integration</title>
|
||||
<titleabbrev>Java</titleabbrev>
|
||||
<partintro>
|
||||
<para>
|
||||
There are two possible ways to bridge PHP and Java: you can either
|
||||
integrate PHP into a Java Servlet environment, which is the more
|
||||
stable and efficient solution, or integrate Java support into PHP.
|
||||
The former is provided by a SAPI module that interfaces with the
|
||||
Servlet server, the latter by the Java extension.
|
||||
</para>
|
||||
<para>
|
||||
PHP 4 ext/java provides a simple and effective means for creating and
|
||||
invoking methods on Java objects from PHP. The JVM is created using JNI,
|
||||
and everything runs in-process. Build instructions for ext/java can be
|
||||
found in <filename>php4/ext/java/README</filename>.
|
||||
|
||||
<section id="java.intro">
|
||||
&reftitle.intro;
|
||||
<para>
|
||||
There are two possible ways to bridge PHP and Java: you can either
|
||||
<link linkend="java.servlet">integrate PHP into a Java Servlet
|
||||
environment</link>, which is the more stable and efficient solution,
|
||||
or integrate Java support into PHP. The former is provided by a SAPI
|
||||
module that interfaces with the Servlet server, the latter by this
|
||||
Java extension.
|
||||
</para>
|
||||
<para>
|
||||
The Java extension provides a simple and effective means for creating and
|
||||
invoking methods on Java objects from PHP. The JVM is created using JNI,
|
||||
and everything runs in-process.
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section id="java.requirements">
|
||||
&reftitle.required;
|
||||
<para>
|
||||
You need a Java VM installed on your machine to use this extension.
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section id="java.installation">
|
||||
&reftitle.install;
|
||||
<para>
|
||||
Build instructions for this extension can be found in
|
||||
<filename>php4/ext/java/README</filename>.
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section id="java.configuration">
|
||||
&reftitle.runtime;
|
||||
<para>
|
||||
The &php.ini; settings involved in configuring the Java
|
||||
extension are <literal>java.library.path</literal> and
|
||||
<literal>java.class.path</literal>.
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<example>
|
||||
<title>Java Example</title>
|
||||
<programlisting role="php">
|
||||
<section id="java.resources">
|
||||
&reftitle.resources;
|
||||
&no.resource;
|
||||
</section>
|
||||
|
||||
<section id="java.constants">
|
||||
&reftitle.constants;
|
||||
&no.constants;
|
||||
</section>
|
||||
|
||||
<section id="java.examples">
|
||||
&reftitle.examples;
|
||||
<para>
|
||||
<example>
|
||||
<title>Java Example</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
// get instance of Java class java.lang.System in PHP
|
||||
|
@ -27,7 +69,7 @@
|
|||
|
||||
// demonstrate property access
|
||||
print 'Java version='.$system->getProperty('java.version').' <br>';
|
||||
print 'Java vendor=' .$system->getProperty('java.vendor').' <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>';
|
||||
|
@ -39,11 +81,11 @@
|
|||
print $formatter->format(new Java('java.util.Date'));
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
<example>
|
||||
<title>AWT Example</title>
|
||||
<programlisting role="php">
|
||||
</programlisting>
|
||||
</example>
|
||||
<example>
|
||||
<title>AWT Example</title>
|
||||
<programlisting role="php">
|
||||
<![CDATA[
|
||||
<?php
|
||||
// This example is only intented to be run as a CGI.
|
||||
|
@ -62,110 +104,114 @@
|
|||
$frame->dispose();
|
||||
?>
|
||||
]]>
|
||||
</programlisting>
|
||||
</example>
|
||||
</programlisting>
|
||||
</example>
|
||||
|
||||
Notes:
|
||||
Notes:
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<simpara>
|
||||
<literal>new Java()</literal> will create an instance of a class if
|
||||
a suitable constructor is available. If no parameters are passed and
|
||||
the default constructor is useful as it provides access to classes
|
||||
like <literal>java.lang.System</literal> which expose most of their
|
||||
functionallity through static methods.
|
||||
</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>
|
||||
Accessing a member of an instance will first look for bean properties
|
||||
then public fields. In other words, <literal>print $date.time</literal>
|
||||
will first attempt to be resolved as <literal>$date.getTime()</literal>,
|
||||
then as <literal>$date.time</literal>.
|
||||
</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>
|
||||
Both static and instance members can be accessed on an object with
|
||||
the same syntax. Furthermore, if the java object is of type
|
||||
<literal>java.lang.Class</literal>, then static members of the class
|
||||
(fields and methods) can be accessed.
|
||||
</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Exceptions raised result in PHP warnings, and &null; results. The
|
||||
warnings may be eliminated by prefixing the method call with an
|
||||
"@" sign. The following APIs may be used to retrieve and reset
|
||||
the last error:
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<simpara>
|
||||
<literal>new Java()</literal> will create an instance of a class if
|
||||
a suitable constructor is available. If no parameters are passed and
|
||||
the default constructor is useful as it provides access to classes
|
||||
like <literal>java.lang.System</literal> which expose most of their
|
||||
functionallity through static methods.
|
||||
</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>
|
||||
Accessing a member of an instance will first look for bean properties
|
||||
then public fields. In other words, <literal>print $date.time</literal>
|
||||
will first attempt to be resolved as <literal>$date.getTime()</literal>,
|
||||
then as <literal>$date.time</literal>.
|
||||
</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>
|
||||
Both static and instance members can be accessed on an object with
|
||||
the same syntax. Furthermore, if the java object is of type
|
||||
<literal>java.lang.Class</literal>, then static members of the class
|
||||
(fields and methods) can be accessed.
|
||||
</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Exceptions raised result in PHP warnings, and &null; results. The
|
||||
warnings may be eliminated by prefixing the method call with an
|
||||
"@" sign. The following APIs may be used to retrieve and reset
|
||||
the last error:
|
||||
<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>
|
||||
Overload resolution is in general a hard problem given the
|
||||
differences in types between the two languages. The PHP Java
|
||||
extension employs a simple, but fairly effective, metric for
|
||||
determining which overload is the best match.
|
||||
</simpara>
|
||||
<simpara>
|
||||
Additionally, method names in PHP are not case sensitive, potentially
|
||||
increasing the number of overloads to select from.
|
||||
</simpara>
|
||||
<simpara>
|
||||
Once a method is selected, the parameters are cooerced if necessary,
|
||||
possibly with a loss of data (example: double precision floating point
|
||||
numbers will be converted to boolean).
|
||||
<!-- FIXME Why aren't java-doubles converted to PHP-floats? Is this
|
||||
correct? -->
|
||||
</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>
|
||||
In the tradition of PHP, arrays and hashtables may pretty much
|
||||
be used interchangably. Note that hashtables in PHP may only be
|
||||
indexed by integers or strings; and that arrays of primitive types
|
||||
in Java can not be sparse. Also note that these constructs are
|
||||
passed by value, so may be expensive in terms of memory and time.
|
||||
</simpara>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
</section>
|
||||
|
||||
<section id="java.servlet">
|
||||
<title>Java Servlet SAPI</title>
|
||||
<para>
|
||||
The Java Servlet SAPI builds upon the mechanism defined by the Java
|
||||
extension to enable the entire PHP processor to be run as a servlet.
|
||||
The primary advanatage of this from a PHP perspective is that web servers
|
||||
which support servlets typically take great care in pooling and reusing
|
||||
JVMs. Build instructions for the Servlet SAPI module can be found in
|
||||
<filename>php4/sapi/README</filename>.
|
||||
|
||||
<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>
|
||||
Overload resolution is in general a hard problem given the
|
||||
differences in types between the two languages. The PHP Java
|
||||
extension employs a simple, but fairly effective, metric for
|
||||
determining which overload is the best match.
|
||||
</simpara>
|
||||
<simpara>
|
||||
Additionally, method names in PHP are not case sensitive, potentially
|
||||
increasing the number of overloads to select from.
|
||||
</simpara>
|
||||
<simpara>
|
||||
Once a method is selected, the parameters are cooerced if necessary,
|
||||
possibly with a loss of data (example: double precision floating point
|
||||
numbers will be converted to boolean).
|
||||
<!-- FIXME Why aren't java-doubles converted to PHP-floats? Is this
|
||||
correct? -->
|
||||
</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>
|
||||
In the tradition of PHP, arrays and hashtables may pretty much
|
||||
be used interchangably. Note that hashtables in PHP may only be
|
||||
indexed by integers or strings; and that arrays of primitive types
|
||||
in Java can not be sparse. Also note that these constructs are
|
||||
passed by value, so may be expensive in terms of memory and time.
|
||||
</simpara>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
<para>
|
||||
sapi/servlet builds upon the mechanism defined by ext/java to enable
|
||||
the entire PHP processor to be run as a servlet. The primary advanatage
|
||||
of this from a PHP perspective is that web servers which support servlets
|
||||
typically take great care in pooling and reusing JVMs. Build instructions
|
||||
for the Servlet SAPI module can be found in
|
||||
<filename>php4/sapi/README</filename>.
|
||||
Notes:
|
||||
|
||||
Notes:
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<simpara>
|
||||
While this code is intended to be able to run on any servlet engine,
|
||||
it has only been tested on Apache's Jakarta/tomcat to date. Bug
|
||||
reports, success stories and/or patches required to get this code
|
||||
to run on other engines would be appreciated.
|
||||
</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>
|
||||
PHP has a habit of changing the working directory. sapi/servlet will
|
||||
eventually change it back, but while PHP is running the servlet engine
|
||||
may not be able to load any classes from the CLASSPATH which are
|
||||
specified using a relative directory syntax, or find the work directory
|
||||
used for administration and JSP compilation tasks.
|
||||
</simpara>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<simpara>
|
||||
While this code is intended to be able to run on any servlet engine,
|
||||
it has only been tested on Apache's Jakarta/tomcat to date. Bug
|
||||
reports, success stories and/or patches required to get this code
|
||||
to run on other engines would be appreciated.
|
||||
</simpara>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<simpara>
|
||||
PHP has a habit of changing the working directory. sapi/servlet will
|
||||
eventually change it back, but while PHP is running the servlet engine
|
||||
may not be able to load any classes from the CLASSPATH which are
|
||||
specified using a relative directory syntax, or find the work directory
|
||||
used for administration and JSP compilation tasks.
|
||||
</simpara>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
</section>
|
||||
</partintro>
|
||||
|
||||
&reference.java.functions;
|
||||
|
|
|
@ -65,7 +65,7 @@ imap
|
|||
info
|
||||
ingres-ii
|
||||
ircg
|
||||
java !no
|
||||
java ++
|
||||
ldap !no
|
||||
mail !no
|
||||
mailparse !no
|
||||
|
|
Loading…
Reference in a new issue