2011-02-10 3 views
6

Некоторые пакеты php wamp/lamp поставляются с php-расширениями, упакованными как php_amf, php_db, php_gd2, и мне просто нужно активировать расширение или установить расширение, если оно не работает, t по умолчанию.Расширение PHP по сравнению с библиотекой (и может быть преобразовано)

Мой вопрос в целом заключается в том, как эти расширения отличаются от библиотек? и в частности, я хочу знать, может ли расширение быть превращено в библиотеку, загруженную в самом проекте? цель состоит в том, чтобы вызвать библиотеку без специальных установок, например, для расширения php. Иногда, когда вы используете общий хостинг, у вас недостаточно прав для установки нового расширения.

+0

Возможный дубликат http://stackoverflow.com/questions/1567605/php-extension-vs-library-vs-class-when-and-why –

+0

@Shakti Спасибо за ссылку, но другой вопрос не в частности, решить проблему конверсии. Это то, что меня больше всего интересует. – sami

+0

+1 действительно большой вопрос! – enam

ответ

8

Расширение PHP - это программа на C или C++, обернутая вокруг Zend Engine, которая предоставляет функции и классы PHP в рамках установки PHP.

PHP-библиотека - это программа, закодированная в родном PHP, которая может или не может использовать расширения для предоставления функций и классов в программе PHP.

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

Проще конвертировать библиотеку PHP в расширение, потому что, очевидно, все функции PHP доступны на C, так или иначе, поскольку PHP кодируется в C. Противоположность не всегда истинна.

+0

+1, но мне больше интересно узнать о преобразовании расширения в библиотеку. У вас есть конкретные комментарии по этому поводу? – sami

+0

@sami: Обновлен ответ. – netcoder

+0

Но я думал, что PHP - это полный язык обучения, что означает, что все, что было сделано на C (или любом языке), PHP также может делать – sami

4

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

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

С точки зрения преобразования расширения в библиотеку: это зависит от того, что делает расширение. Если это можно сделать с помощью raw PHP, то вы можете его преобразовать, но это в значительной степени полная переработка функциональности. Это может также сделать код более медленным.

+0

Был бы человек, который проголосовал за меня, чтобы объяснить, где я был неправ? –

+0

@Tim: Я не спускал вниз, но думаю, что комментарий «быть в состоянии сделать что-то, что нельзя сделать с PHP», является ложным - все, что может сделать расширение, может сделать PHP. Это просто, что расширение будет значительно улучшаться **. (PHP предоставляет почти любой системный вызов POSIX уже, кроме pthreads, и вам лучше не использовать потоки в PHP-скрипте в любом случае. –

+1

По-видимому, им не понравилось, что я дублировал ответ от netcoder, но два ответа были отправленные в течение 30 секунд друг от друга. Если я на 90% ответию, а другой приходит, я обычно заканчиваю то, что я набираю, а не отказываюсь. –

2

может расширение быть превращена в библиотеку

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