PHP-Nuke по-русски    Главная
Начальная
страница
 Клуб
Русский
клуб
 Разделы
Тематические
разделы
 Ссылки
Каталог
сайтов
 Файлы
Каталог
программ
 Школа
Практические
занятия
 Форум
Форумы
поддержки
Учебник РНР
Назад Вперёд

XLVIII. Java

Есть два способа связать PHP и Java: вы можете либо интегрировать PHP в среду Java Servlet, что является более стабильным и эффективным решением, либо интегрировать поддержку Java в PHP. Первый предоставляется SAPI-модулем, который является интерфейсом с Servlet-сервером, второй - РНР-расширением Java.

PHP 4 ext/java предоставляет простые и эффективные средства для создания и вызова методов Java-объектов из PHP. JVM создаётся с использованием JNI, и всё запускается in-process. Встроенные инструкции для ext/java можно найти в файле php4/ext/java/README.
Пример 1. Java
<?php
  // получить экземпляр Java-класса java.lang.System в PHP
  $system = new Java('java.lang.System');

  // демонстрируется доступ к свойствам
  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
  $formatter = new Java('java.text.SimpleDateFormat',
                        "EEEE, MMMM dd, yyyy 'at' h:mm:ss a zzzz");

  print $formatter->format(new Java('java.util.Date'));
?>
Пример 2. AWT
<?php
  // Этот пример предназначается только для запуска как CGI.

  $frame  = new Java('java.awt.Frame', 'PHP');
  $button = new Java('java.awt.Button', 'Hello Java World!');

  $frame->add('North', $button);
  $frame->validate();
  $frame->pack();
  $frame->visible = True;

  $thread = new Java('java.lang.Thread');
  $thread->sleep(10000);

  $frame->dispose();
?>

Примечания:

  • new Java() создаст экземпляр класса, если подходящий конструктор доступен. Если параметры не передаются, используется конструктор по умолчанию, так как он предоставляет доступ к классам вроде java.lang.System, которые экспонируют большую часть своей функциональности через static-методы.

  • При доступе к члену экземпляра сначала ищутся свойства "боба"/bean (компонента), а затем - public-поля. Иначе говоря, print $date.time сначала пытается разрешиться как $date.getTime(), а затем как $date.time.

  • Доступ к статическим членам и членам экземпляра может быть выполнен на объекте с тем же самым синтаксисом. Кроме того, если java-объект имеет тип java.lang.Class, то можно получить доступ также к static-членам класса (полям и методам).

  • Возникающие исключения выдают предупреждения PHP и NULL-результаты. Появление предупреждений можно подавить с помощью префиксирования вызовов методов знаком "@". Следующие API можно использовать для запрашивания и восстановления последней ошибки:

  • Решение проблемы перегрузки в общем является большой проблемой из-за различий в типах между двумя языками. PHP-расширение Java реализует простую, но довольно эффективную метрику для определения того, какая перегрузка подходит более всего.

    Кроме того, имена методов в PHP не чувствительны к регистру символов, потенциально увеличивая количество перегрузок, из которых делается выборка.

    После выбора метода выполняется если необходимо, приведение параметров, возможно, с потерей данных (пример: числа двойной точности с плавающей точкой будут конвертированы в boolean).

  • По традиции в PHP массивы и хэш-таблицы могут взаимозаменяться. Обратите внимание, что хэш-таблицы в PHP могут индексироваться только целыми числами или строками, и что массивы примитивных типов Java не могут быть рассеяны/sparse. Также заметьте, что эти конструкции передаются по значению, поэтому могут быть затратными в плане памяти и времени.

sapi/servlet построен на механизме, определённом расширением ext/java, что обеспечивает запуск всего процессора PHP как сервлета. Основным преимуществом этого способа, в отличие от PHP, является то, что web-серверы, поддерживающие сервлеты, обычно очень заботятся о пулах и повторном использовании JVM. Инструкции построения для модуля Servlet SAPI можно найти в файле php4/sapi/README.

Примечания:

  • Поскольку предполагается, что этот код должен иметь возможность запуска на любой машине сервлетов, он был протестирован только на Apache'вском Jakarta/tomcat. Мы приветствуем также сообщения о дефектах, успехах и/или патчах, необходимых для работы этого кода на других машинах.

  • PHP имеет привычку менять рабочую директорию. sapi/servlet может вернуть в прежнюю, но, пока PHP работает, машина сервлетов не сможет загрузить какие-либо классы из CLASSPATH, которые специфицированы с использованием относительного синтаксиса директорий, или найти рабочую директорию, используемую для задач администрирования и компиляции JSP.

Содержание
java_last_exception_clear - очищает последнее Java-исключение
java_last_exception_get - получает последнее Java-исключение

Назад Оглавление Вперёд
ircg_whois Вверх java_last_exception_clear

© RigaNet - Internet studio
For Web site issues, contact the Web master.

Rambler's Top100 Рейтинг@Mail.ru RigaNet