Профессиональное программирование на PHP

Страница 484 из 591


502 Глава 21 Расширение РНР: часть I

раммистов, это может оказаться непрактичным. Совсем не обязательно, что на смену программисту, написавшему расширение, придет сотрудник настолько же квалифицированный в С. Хотя эту ситуацию можно рассматривать как некоторую "страховку" для программиста, не следует необдуманно ставить себя или своего работодателя (который будет вынужден нанимать наряду с PHP-программистами С-программистов) в безвыходное положение.

Кроме того, создать качественную программу на С сложнее, чем на РНР. Так как данные, созданные в расширениях, не обрабатываются автоматически Zend-системой уборки мусора, разработчику придется опасаться утечек памяти или ресурсов; в частности, Zend API обращается к "черной магии", когда в расширениях приходится обрабатывать указатели на ресурсы. Процесс отладки программ, написанных на С, гораздо продолжительнее отладки PHP-приложений: С-программист не может просто изменить одну строку кода и получить эффект, ему придется внести изменение, перекомпилировать и перезапустить приложение. Кроме того, если в С предпринимать нежелательные действия, то возрастает возможность краха приложений (из-за ошибок сегментации и др.).

Как почти всякая потенциальная оптимизация производительности, трансформация приложения в С является вопросом выбора компромисса. Язык С предоставляет следующие преимущества:

 скорость,

 сокращение сложности РНР-кода. Однако С имеет и недостатки:

 сокращается возможность сопровождения,

 увеличивается цикл разработки,

 снижается надежность приложения.

Для некоторых организаций эти компромиссы имеют смысл. Если требуется создать интерфейс к внешней библиотеке, то обычно нет другого выбора, кроме обеспечения доступа к ней через расширение-оболочку.

Основы создания расширений

Зная С, писать PHP-расширения нетрудно. РНР предоставляет множество инструментов, которые облегчают объединение РНР- и С-кода. В данном разделе описаны все этапы, необходимые для создания PHP-расширения, которое регистрирует процедурные функции.

Создание заглушки для расширения

Простейшим способом создания нового расширения является использование стандартного скелета расширения. Это можно сделать с помощью сценария ext_skel в каталоге ext дерева исходного кода РНР. Чтобы создать расширение с именем example, в корневом каталоге дерева исходных кодов необходимо применить следующие команды:

> cd ext

> ./ext_skel --extname=example Creating directory example




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006