2011-02-10 10 views
6

Alcuni pacchetti php wamp/lamp sono forniti con estensioni php incluse in php_amf, php_db, php_gd2 e devo semplicemente attivare l'estensione o installare l'estensione se non lo fa t come predefinito.Estensione PHP vs. libreria (e può essere convertita)

La mia domanda in generale è: in che modo queste estensioni sono diverse dalle biblioteche? e, in particolare, desidero sapere che un'estensione può essere trasformata in una libreria caricata nel progetto stesso? l'obiettivo è chiamare la libreria senza installazioni speciali come le estensioni php. A volte, quando si è in hosting condiviso, non si dispone di privilegi sufficienti per installare una nuova estensione.

+0

possibile duplicato di http://stackoverflow.com/questions/1567605/php-extension-vs-library-vs-class-when-and-why –

+0

@Shakti Grazie per il collegamento, ma l'altra domanda non affrontare in modo specifico il problema della conversione. Questo è quello a cui sono maggiormente interessato. – sami

+0

+1 Davvero una bella domanda! – enam

risposta

8

Un'estensione PHP è un programma C o C++, avvolto attorno al motore Zend, che fornisce funzioni e classi PHP all'interno di un'installazione PHP.

Una libreria PHP è un programma codificato in PHP nativo che può o meno utilizzare estensioni per fornire funzioni e classi all'interno di un programma PHP.

Mentre è possibile e abbastanza facile (presupponendo che si abbia una conoscenza sufficiente del C++) per trasformare una libreria PHP in un'estensione, l'opposto può essere un processo noioso, perché il programma C++ può utilizzare funzioni e oggetti che non sono disponibili in PHP.

È più semplice convertire una libreria PHP in un'estensione, perché ovviamente le funzioni PHP sono tutte disponibili in C, in un modo o nell'altro, poiché PHP è codificato in C. L'opposto non è sempre vero tuttavia.

+0

+1 ma mi chiedo di più sulla questione della conversione di un'estensione in una libreria. Avete commenti specifici su questo? – sami

+0

@sami: aggiornata la risposta. – netcoder

+0

Ma pensavo che PHP fosse un linguaggio completo di turing, il che significa che tutto ciò che è stato fatto in C (o in qualsiasi lingua), PHP può anche fare – sami

4

Un'estensione PHP è scritta in un'altra lingua (di solito C o C++) e estende PHP per consentirgli di fare qualcosa che non potrebbe essere fatto in pratica con PHP. Ad esempio, interazione diretta con il sistema operativo o il server web che non è già supportato da una funzione integrata PHP. Le estensioni consentono anche il riutilizzo del codice esistente scritto in altre lingue da PHP; anche se in teoria la libreria potrebbe essere riscritta in PHP, sarà spesso poco pratico farlo, e il riutilizzo del codice offre più funzionalità con meno sforzo e consente di incorporare gli aggiornamenti futuri del codice con poco o nessun sforzo.

Una libreria PHP è solo una raccolta condivisa di codice PHP, quindi sebbene consenta il riutilizzo del codice da parte di più di uno sviluppatore, non consente di eseguire operazioni che non è possibile (teoricamente) scrivere codice PHP per te.

In termini di conversione di un'estensione in una libreria: dipende dall'estensione. Se può essere fatto con PHP raw, allora puoi convertirlo, ma è praticamente una completa riscrittura della funzionalità. Potrebbe anche rallentare il codice.

+0

La persona che mi ha offeso avrebbe cura di spiegare dove mi ero sbagliato? –

+0

@Tim: Non ho fatto downvoting, ma la mia ipotesi è che il commento di "essere in grado di fare qualcosa che non può essere fatto con PHP" è falso - tutto ciò che un'estensione può fare PHP può fare. È solo un'estensione che le cose si esibiranno ** in modo significativo ** meglio. (PHP espone praticamente tutte le chiamate di sistema POSIX già ad eccezione di pthreads, e sarebbe meglio non usare thread in uno script PHP. –

+1

In teoria, a loro non piaceva il fatto che ho duplicato la risposta da netcoder, ma le due risposte erano postato entro 30 secondi l'una dall'altra Se sono al 90% attraverso una risposta e ne arriva un'altra, di solito finisco quello che sto digitando piuttosto che abbandonare –

2

può un'estensione essere trasformato in una biblioteca

Non automaticamente, no. Un'estensione non è scritta in PHP; quindi non può essere semplicemente convertito. È ovviamente possibile scrivere PHP che esegue le operazioni equivalenti, ma tale script sarebbe molto più lento dell'estensione originale perché PHP è relativamente inefficiente per il calcolo (se confrontato con lingue native/compilate).

Problemi correlati