публикация №1096362868, версия для печати

Что нового в PHP-4 ?


Дата публикации: 28 сентября 2004
Публикатор: maskaev (номер депонирования: BY-1096362868)
Рубрика: КОМПЬЮТЕРЫ И ИНТЕРНЕТ Программирование


ЛАУЭР КРИСТОФЕР

Что нового в PHP4?
Так долго ожидаемая версия PHP4 вышла в конце мая 2000 года. PHP4 успешно прошло стадии Beta-test (бета тестирование) и Release Candidate (кандидат на релиз). Сейчас доступна окончательная версия PHP4.0.3p1.

С выходом каждой новой версии программного продукта, постоянно возникают одни и те же вопросы: "Что нового в этой версии ?" и "Какие из нововведений действительно полезны ?". Вполне законные вопросы. Стоит ли переходить на новую версию? Ведь это может вызвать массу различных проблем.

В статье будут бегло рассмотрены новые возможности PHP4, что поможет оценить по достоинству гигантскую работу, проделанную Zeev Suraski, Andi Gutmans и другими.

В чем отличие между PHP3 и PHP4?

PHP4 - это полностью переписанный PHP3, включая движок. Но почему авторы решили все полностью переписать?

Способ, с помощью которого работает скриптовый движок PHP3 не приспособлен к выполнению больших, широко - масштабируемых приложений, таких как Phorum или KeyStone. В действительности, движок считывает инструкции скрипта строчку за строчкой, и также построчно потом выполняет, что позволяет PHP3 достичь высокой производительности на достаточно коротких и простых скриптах, однако производительность сильно падает на больших приложениях. Важно осознать, что PHP3 не было приспособлено для выполнения таких приложений.

Поэтому создатели PHP3 решили разработать скриптовый движок, который будет считывать целиком все PHP коды и "компилировать" их перед выполнением. Движок назвали Zend. При переходе с PHP2 на PHP3 возникло много несовместимости. Такие различия между PHP3 и PHP4 постарались минимизировать. Авторам это удалось. Несовместимости очень мало.

Хотя Zend и является составной частью PHP4, на самом деле, это скриптовый/рантайм (scripting/runtime) движок, который не привязан к языку PHP. Таким образом, Zend можно использовать совместно с MySQL, как основу для разработки хранимых процедур, написанных на специфичном для этой базы данных языке.

Не вдаваясь в детали внутренней реализации, можно выделить несколько особенностей совместно работающих Zend и PHP4.

Новая архитектура PHP4 позволила разработчикам добавить в ядро языка абстрактный слой относительно веб - сервера. Начиная со времен PHP3 и по сегодняшний день, мы были вынуждены выбирать, использовать PHP, как модуль веб - сервера Apache, либо как CGI во всех других HTTP серверах. С появлением PHP4, стала возможна более тесная интеграция с веб серверами, отличными от Apache. В частности с веб - сервером IIS корпорации Microsoft. PHP4 теперь работает, как ISAPI фильтр для IIS. Для этого некоторые части кода PHP4 были адаптированы для работы в мультитредовом (multi-thread) окружении. PHP4 теперь тредо-безопасный (thread-safe).

Существует много новых особенностей, касающихся внутренней реализации PHP4, однако они напрямую никак не касаются PHP программиста. Тем не менее, стоит остановиться на самых важных из них: механизм выделения памяти, механизм подсчета ссылок. Другими словами, эти механизмы высвобождают ресурсы, которые больше не используются. Таким образом, улучшается использование памяти, особенно для объектов и таблиц. Чем больше информации содержат переменные, тем больше памяти остается свободно.

С точки зрения разработчика.

Каковы главные различия между PHP3 и PHP4 с точки зрения пользователя (PHP4 дизайнер/разработчик )?

Сессии

Одни из наиболее ожидаемых функций PHP4, это функции поддержки сессий. Т.е. все те значения и переменные, которые привязаны к конкретному пользователю и могут передаваться от страницы к странице внутри одного приложения.

При использовании PHP3, было необходимо выстраивать систему сессий вручную, с помощью механизма cookie, передачу параметров или используя PHPLib. PHPLib до сих пор может использоваться и с PHP4, потому что предоставляет и другие возможности, кроме управления сессиями.

Целая группа директив конфигурации в php.ini снимает с программиста бремя заботы о контекстах сессий и пользователей. Переменные сессий могут храниться просто в ASCII файле либо в реляционной базе данных. Все эти возможности задокументированы в официальном описании PHP4

Буферирование вывода

В PHP3, все, что было сгенерировано с помощью функций echo() и print(), сразу отсылалось непосредственно серверу. В PHP4, промежуточный запоминающий слой может задержать посылку веб серверу потокa выходных данных. Для этих целей, существует ряд еще недокументированных функций:

ob_start(): активирует буферизацию вывода
ob_end_flush(): отсылает содержимое выходного буфера и деактивирует буферизацию
ob_end_clean(): освобождает содержимое выходного буфера и деактивирует буферизацию
ob_get_contents(): возвращает содержимое выходного буфера
Этими функциями можно заранее подготовить содержимое вывода, формируемое с помощью, например, нескольких запросов к базе данных, и потом отослать результат на сервер, в случае успешного завершения этих запросов. В противном случае, можно очистить выходной буфер и вместо него вывести сообщение об ошибке. Следующий пример иллюстрирует типичное использование этих возможностей:



Оператор вычисления идентичности

Этот оператор позволяет проверить равенство значений, а также совпадение типов двух различных переменных или выражений. С помощью неявного преобразования типов в PHP, число 5 может сравниваться со строкой "5". Два этих значения считаются равными при обычном сравнении. Новый же оператор, возвращает TRUE (истина) только в том случае, если идентичны значения и типы переменных. Он представляется тремя знаками === (===). В следующем примере четыре первых выражений используют обычный оператор сравнения и все они возвращают TRUE. Последующие четыре используют оператор вычисления идентичности, и только пятое и восьмое выражения возвращают TRUE.

$valint1 = 1;
$valint2 = 2;
$valint3 = 3;
$valfloat1 = 1.0;
$valfloat2 = 2.0;
$valfloat3 = 3.0;
$valstr3 = '3';
$res = (($valint1+$valint2)==$valint3) ? ('TRUE'):('FALSE') ;
print " TEST 1 : " . $res . "
n";

$res = ($valint3==$valfloat3) ? ('TRUE') : ('FALSE') ; print " TEST 2 : " .
$res . "
n";

$res = ($valstr3==$valint3) ? ('TRUE') : ('FALSE') ; print " TEST 3 : " . $res
. "
n";

$res = (($valfloat1+$valfloat2)==$valfloat3) ? ('TRUE') : ('FALSE') ; print "
TEST 4 : " . $res . "
n
";

"; $res = (($valint1+$valint2)===$valint3) ? ('TRUE') : ('FALSE') ;
print " TEST 5 : " . $res . "
n";

$res = ($valint3===$valfloat3) ? ('TRUE') : ('FALSE') ; print " TEST 6 : " .
$res . "
n";

$res = ($valstr3===$valint3) ? ('TRUE') : ('FALSE') ; print " TEST 7 : " .
$res . "
n";

$res = (($valfloat1+$valfloat2)===$valfloat3) ? ('TRUE') : ('FALSE') ; print "
TEST 8 : " . $res . "
n";


Поддержка COM в Windows

На Windows платформах, PHP4 обеспечивает поддержку COM компонентов. Это означает, что практически любые Windows приложения могут управляться из PHP4. COM модель, которая лежит в основе Microsoft архитектуры такова, что любое Windows приложение может предоставить такое количество компонентов и открытых методов, сколько существует точек входа для управления приложением из других приложений.

Возможно, несколько строк кода будут более полезны, нежели долгие объяснения. Рассмотрим следующий пример. Данный код запускает Word, создает в нем новый документ, добавляет текст в этот документ, затем сохраняет все на диск и выходит.

Отображение фрагментов HTML кода

Еще одно нововведение в PHP4. Это
новый синтаксис, повторяющий "here printing" из Perl.
Теперь есть возможность отображать целые
фрагменты HTML кода, обрамляя их инструкциями echo
или print и оконечной меткой. В отличии от Perl, в PHP4
такой оператор обозначается не двойным знаком
меньше (<<), а тройным (<<<). В качестве
примера:



ISAPI support
COM support on Win32
Java and servlets support

$valstr
Tested on PHP version $version
mylabel;
echo "
--------------------------------------------------------------------------------

/n";
?>

Поддержка Java
Поддержка Java является, без
сомнения, одним из тех новых свойств, которые
открывают возможность для PHP4 использовать уже
существующие системы и приложения. С помощью PHP4,
можно использовать Java сервлеты (servlet) и классы.
Поддержка Java не является
встроенной возможностью в PHP4; необходимо
добавить и сконфигурировать дополнительное
расширение. Чтобы иметь возможность
использовать поддержку Java под Linux, надо
перекомпилировать PHP4 с определенными опциями.
Также существует такое расширение для Windows в виде
уже откомпилированного модуля. Эти расширения
можно найти на официальном сайте PHP. При этом надо
выбрать, какую версию Java вы будете использовать
(JDK 1.1.8, 1.2, 1.3). В последующих примерах используется
JDK 1.1.8.
В файле php.ini вы должны добавить
две строчки в новый раздел ?Java?:
[java] java.class.path="c:jdk1.1.8libclasses.zip; C:Program
FilesApachecgi-binphp_java.jar; C:Program FilesApachehtdocsphpjava"
extension=php_java.dll
Вы можете затем убедиться, что
сконфигурировали все правильно. Выполнив
команду phpinfo() должны увидеть нечто подобное:



Затем, поместите Java классы,
которые вы собираетесь использовать, в одну из
директорий указанных директивой java.class.path. К
примеру, в c:Program FilesApachehtdocsphpjava.
Представьте, что у вас есть Java
класс, называющийся Point и описывающий точку: ее
координаты, различные необходимые методы
(конструктор, традиционные методы установки и
получения свойств, метод toString).
public class Point {

// attributes
public int abscissa;
public int ordinate;

public int type;

// default constructor
public Point() {
љљsetCoordinates(0,0);
љљthis.type = 1 ;
}
// constructor
public Point(int x,int y) {
љљ setCoordinates(x,y);
љљ this.type = 1 ;
}
// Overloaded object method
public toString String(){
љљ // Call the display method
љљ return display();
}
// Point class methods
public void setType(int mytype){
љљ // Call the display method
љљ this.type = mytype;
}
public int getAbscissa() { return abscissa; }
public int getOrdinate() { return ordinate; }
public void setCoordinates(int abscissa, int ordinate) { љљthis.abscissa =
abscissa;
љ this.ordinate = ordinate;
}
public sayHello String() {
љ return "I am a point :-)";
}
public display String(){
return "("+abscissa+","+ordinate+" Type "+type+")";
}
}

Итак, ели все сконфигурировано
правильно и файл Point.class находится в нужном месте,
мы можем выполнить следующий PHP код:
n";
?>

В результате вы получите:

Point created at (0,0) ... Point moved to (15,15) (15,15 Type 1) I am a Point :-)

Выводы

Четвертая версия PHP ? это больше, чем просто модернизация. Это новая реализация, которая повлекла за собой полное переписывание кодов разработчиками: Zeev Suraski, Andi Gutmans и др. Теперь существует бесплатное качественное решение, которое может применяться в крупных профессиональных приложениях.

Перевод: Сергей Каличев

Опубликовано 28 сентября 2004 года


Главное изображение:

Полная версия публикации №1096362868 + комментарии, рецензии

LIBRARY.BY КОМПЬЮТЕРЫ И ИНТЕРНЕТ Что нового в PHP-4 ?

При перепечатке индексируемая активная ссылка на LIBRARY.BY обязательна!

Библиотека для взрослых, 18+ International Library Network