8
votes

Extension PHP vs. Bibliothèque (et peut-il être converti)

Certaines packages PHP WAMP / Lampe sont livrés avec des extensions PHP emballées dans des php_amf, php_db, php_gd2 et je dois simplement activer l'extension ou installer l'extension si elle ne vient pas par défaut.

Ma question en général est, comment ces extensions sont-elles différentes des bibliothèques? et dans des spécifications que je veux savoir, une extension peut-elle être transformée en une bibliothèque qui est chargée dans le projet lui-même? L'objectif est d'appeler la bibliothèque sans installations spéciales telles que les extensions PHP. Parfois, lorsque vous êtes sur l'hébergement partagé, vous n'avez pas assez de privilèges pour installer une nouvelle extension.


2 commentaires

duplicailler possible de Stackoverflow.com/questions/1567605/...


@Shakti merci pour le lien, mais l'autre question ne traite pas spécifiquement de la question de la conversion. C'est ce que je suis surtout intéressé.


3 Réponses :


13
votes

Une extension PHP est un programme C ou C ++, enveloppé autour du moteur Zend, qui fournit des fonctions et des classes PHP dans une installation PHP.

Une bibliothèque PHP est un programme codé dans Native PHP qui peut ou non utiliser des extensions pour fournir des fonctions et des classes dans un programme PHP.

S'il est possible et assez facile (en supposant que vous disposez de suffisamment de connaissances C ++) pour transformer une bibliothèque PHP en une extension, l'inverse peut être un processus fastidieux, car le programme C ++ peut utiliser des fonctions et des objets non disponibles dans PHP .

Il est plus facile de convertir une bibliothèque PHP en extension, car évidemment, les fonctions PHP sont toutes disponibles en C, d'une manière ou d'une autre, car PHP est codé dans C. L'opposé n'est pas toujours vrai cependant.


3 commentaires

+1 Mais je me demande davantage sur la question de la conversion d'une extension à une bibliothèque. Avez-vous des commentaires spécifiques à ce sujet?


Mais je pensais que PHP est une langue Turing-Complete, ce qui signifie que tout ce qui a été fait en C (ou toute langue), PHP peut également faire


@sami: Je n'ai pas dit que PHP ne peut pas le faire, j'ai dit que c'était fastidieux. Par exemple, en C ++, vous avez une notion d'amitié entre les classes, l'héritage multiple, les arguments constants et les valeurs de retour, dont aucun PHP n'a actuellement. Il est possible de simuler de telles choses, mais ce n'est pas aussi facile que de renommer une fonction ou de changer quelques arguments. Certaines de ces changements nécessitent une modification de la conception du programme. D'autre part, la langue C ++ prend en charge la quasi-totalité des caractéristiques de la langue PHP.



4
votes

Une extension PHP est écrite dans une autre langue (généralement C ou C ++) et étend PHP pour lui permettre de faire quelque chose qui ne pouvait pas être fait en pratique avec PHP. Par exemple, interaction directe avec le système d'exploitation ou le serveur Web qui n'est pas déjà pris en charge par une fonction intégrée PHP. Les extensions permettent également de réutiliser le code existant écrit dans d'autres langues de PHP; Même si la bibliothèque pouvait être réécrite dans PHP, elle sera assez peu pratique de le faire, et la réutilisation de code donne davantage de fonctionnalités avec moins d'effort et permet aux futures mises à jour du code à intégrer avec peu ou pas d'effort.

Une bibliothèque PHP n'est qu'une collection partagée de code PHP, alors bien qu'elle permet à un code de réutiliser par plus d'un développeur, cela ne vous permet pas de faire quoi que ce soit que vous ne pouviez pas (théoriquement) écrire code PHP pour vous-même.

en termes de conversion d'une extension à une bibliothèque: cela dépend de l'extension. Si cela peut être fait avec PHP brut, vous pouvez le convertir, mais il est à peu près une réécriture complète de la fonctionnalité. Il peut également rendre le code plus lent.


11 commentaires

La personne qui a vécu-t-elle m'a voté pour expliquer où j'avais tort?


@IM: Je n'ai pas répondu, mais je suppose que c'est que le commentaire de "être capable de faire quelque chose qui ne pouvait pas être fait avec php" est faux - tout ce qu'une prolongation peut faire PHP peut faire. C'est juste que, comme une extension, les choses vont performer de manière significative meilleure. (PHP expose à peu près tous les appels système POSIX déjà sauf Pthreads, et vous feriez mieux de ne pas utiliser de threads dans un script PHP.


Concevabilité, ils n'ont pas aimé le fait que j'ai dupliqué la réponse de Netcoder, mais les deux réponses ont été postées dans les 30 secondes de l'autre. Si je suis 90% à travers une réponse et une autre appartient, je me termine habituellement ce que je tape plutôt que d'abandonner.


Comment PHP peut-elle, sans l'aide d'une extension, faire un accès à la mémoire brute? Appelez-vous des fonctions C / C ++ pour lesquelles une enveloppe n'existe pas dans la bibliothèque standard PHP? Instanciez C ++ classes?


@Billy Oneal, cela signifie donc qu'une extension peut être convertie en une bibliothèque?


@TIM: Non, il ne peut pas faire accès à la mémoire brute, ni instancier des classes C ++. Mais il n'a pas de sens de le faire dans PHP; il n'a pas de modèle de mémoire; Et vous pouvez simplement créer la fonctionnalité des classes C ++ dans des cours de PHP à la place.


@Tim: Ce que je veux dire, c'est: impossible est un mot fort. Vous pouvez faire dupliquer tout ce que la bibliothèque d'UserMode C ou C ++ peut faire en PHP (le mode de noyau est un autre problème. PHP n'a pas moyen de parler avec des instructions de l'assembleur ou de la CPU). Il n'est tout simplement pas très pratique, car il y a beaucoup de fonctionnalités déjà écrites en C ou C ++, et la voie naturelle d'exposer que la fonctionnalité est par le biais d'extensions.


@Billy: OK, PHP Turing-complète, il n'y a donc pas de fonctionnalité qui ne peut pas être implémentée dans PHP si vous êtes prêt à la réécrire. Mais si vous avez une grande bibliothèque dans une autre langue et que vous réécrivez, ce n'est pas une option (soit trop grande, sinon vous voulez une compatibilité à 100%), alors dans la pratique, cela ne peut pas être fait avec PHP pur. Beaucoup (la majorité?) Des extensions couvrent ce type de cas.


@IM: Je conviendrais que ce serait peu pratique , mais pas impossible . Il y a un monde de différence là-bas.


@Billy Merci pour les commentaires, j'ai clarifié le problème dans ma réponse.


@Tim, drôle comment vous mentionnez Turing-complet, je viens de finir d'écrire un commentaire à ce sujet.



2
votes

Une extension peut-elle être transformée en une bibliothèque

pas automatiquement, non. Une extension n'est pas écrite en PHP; Par conséquent, il ne peut pas être simplement converti. Il est bien sûr possible d'écrire PHP qui effectue les opérations équivalentes, mais un tel script serait nettement plus lent que l'extension d'origine, car PHP est relativement inefficace pour le calcul (par rapport aux langues natives / compilées).


0 commentaires