2010-09-29 13 views
8

Sono interessato a creare il mio framework php per mio uso personale per semplificare la mia codifica. Sto facendo questo come sono abbastanza (una specie) uso di PHP ora, e non riesco a ottenere l'uso di qualsiasi quadro.Costruire il proprio framework php

Ho un'idea di fare un sacco di funzioni in un file .php. Come ho iniziato a fare, sor per la funzione di invio di posta ho semplificato che (per il mio uso):

function sendmail($to, $message, $subject, $from){//USE sendmail($to, $message, $subject, $from) 
$headers = "From:"; 
$headers .= $from; 
$headers .= "\r\n"; 
$headers .= "Reply-To:"; 
$headers .= $from; 
$headers .= "\r\n"; 
$headers .= "X-Mailer: Drupal\n"; 
$headers .= 'MIME-Version: 1.0' . "\n"; 
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; 
mail($to, $subject, $message, $headers); 
} 

Questo sarà poi utilizzato in un modulo di contatto:

sendmail($_POST['to'], $_POST['message'], $_POST['subject'], $_POST['from']); 

Questa funzione elettronica per me va bene.

Tuttavia, non sono sicuro se è corretto creare un framework come questo. Ho esaminato le classi e gli oggetti per PHP ma non riesco a capirli perché non esiste un tutorial comprensibile/facile.

+8

Ti suggerisco di leggere su quali strutture sono effettivamente ... quello che stai descrivendo è semplicemente una libreria di funzioni, non un framework ... http: //www.slideshare.net/muhammadghazali/a-good-php-framework-for-beginners-like-me potrebbe fornire una lettura utile –

+2

Scorri l'utente a creare il tuo framework a meno che tu non abbia una profonda conoscenza di PHP e conosci estremamente bene diversi framework esistenti. Ho creato il mio framework in passato e ho perso il mio tempo, scoprendo poi che alcuni framework esistenti sono molto migliori dei miei e sono scritti da sviluppatori molto più esperti di me. –

+1

La tua definizione "quadro" è stata sfortunata come evidenziato di seguito. Vai avanti, crea il tuo assembly di codice di utilità. Questo è un approccio molto utile per entrare in PHP. E ti sarà molto più familiare. (Anche OOP non è l'apice della programmazione, non in PHP.) – mario

risposta

33

Le persone stanno per dirti di non scrivere il tuo quadro, di usarne uno esistente. Non ascoltarli. È una buona esperienza di apprendimento e ti aiuterà a capire i concetti che renderanno gli altri quadri più sensati per te.

io personalmente bisogno di capire 2 cose meglio prima di poter utilizzare altri framework popoli (e, ovviamente, scrivere il mio):

  1. OOP
  2. MVC

Ho passato giorni leggendo ogni Tutorial OOP su PHP e ogni pagina tutorial/wiki su MVC. Poi come esperienza di apprendimento ho scritto la mia struttura. Poi ho imparato dai miei errori e ho iniziato da zero e ho scritto un altro framework. Probabilmente ho scritto 5 versioni. Poi ho deciso di provare l'accenditore del codice. Dopo tutta la lettura e la pratica, finalmente l'ho capito.

Da allora ho utilizzato solo strutture di altri popoli.

+7

+1 Sono d'accordo, usa questo progetto come pratica per imparare OOP. Quindi, anche se decidi di utilizzare altri framework al posto del tuo ambulatorio, conoscerai OOP e saprai come utilizzare meglio questi framework. –

+1

Penso che l'utilizzo di una struttura consolidata sia un ottimo modo per affinare le tue abilità di sviluppo OOP vedendo in prima persona come possono essere applicati meglio allo sviluppo web. – webbiedave

+1

sono d'accordo ma devi prima capire i concetti sottostanti – Galen

1

Questo sarà forse troppo rigido, ma: non considerare la creazione di un proprio framework a meno che non si comprenda pienamente la programmazione orientata agli oggetti. La conoscenza OOP si evolverà dalla tua programmazione procedurale quando acquisirai più esperienza.
Creare un file PHP che contenga le tue funzioni di uso comune è comunque una buona idea e direi di provarci. Ma non chiamatelo framework :)

+0

E qual è il modo migliore per acquisire conoscenze? Per fare errori (dato che puoi quindi imparare da loro). E qual è il modo migliore per commettere errori? Per provare a fare qualcosa al di fuori del tuo ambito di conoscenza corrente (appena fuori) ... Quindi qual è il modo migliore per capire l'OOP? Per scrivere OOP! Costruire qualcosa come un framework può essere un ottimo strumento per imparare come funziona OOP ... Troppe persone IMHO sanno solo come usare un framework (come Zend o qualsiasi altra cosa), non come e - più importante-- ** perché ** funziona ... Un po 'di sperimentazione e fallimento può fare molto per acquisire esperienza ... – ircmaxell

+0

@ircmaxwell Fai un buon punto, ma tieni presente che può essere difficile imparare dai tuoi errori. Puoi scrivere qualcosa che compila e fa ciò che vuoi che faccia, ma ciò non significa che non ci siano errori lì dentro – GSto

+0

@ircmaxell: Sì, questo è ciò che intendevo per "evoluzione dalla programmazione procedurale". Inoltre non ho detto "non andare per quello", ho appena detto "non chiamarlo quadro". –

1

Ammirabile come potrebbe essere se non si sa nemmeno quali sono i fondamenti di base della costruzione di un framework, specialmente i pattern, e non sono completamente radicati in OOP e sono comodi a scriverlo allora come ti aspetti di raggiungere il tuo obiettivo? Non impari necessariamente molto scrivendo il codice te stesso, cioè se scrivi 40 volte il codice errato non ti sta insegnando nulla (non è una critica personale a te tra l'altro) ma leggendo il codice di altri popoli, che sarà sia buono, cattivo e indifferente allora imparerai.

1

In genere, un framework ha un obiettivo specifico. Un Framework può supportare un CMS, un motore 3D, un sistema di accesso ai dati, ecc ... spesso si possono vedere diversi framework usati insieme per raggiungere l'obiettivo finale, come l'uso di Spring, Hibernate e JavaEE per costruire un sistema basato su Java applicazione web.

Dal suo aspetto, si raccolgono tutte le funzioni preferite in un unico file (o le si raggruppano in file diversi per funzionalità?). Questo può essere utile, ma non definirei questo framework - ancora. È davvero una biblioteca. Se tutte le tue funzioni sono pensate per supportare la funzionalità di posta elettronica di fantasia, allora impara OOP e costruisci un framework il cui unico obiettivo è quello di fornire un'interfaccia facile da usare alle fantastiche funzionalità di posta elettronica.

+0

Sto pianificando di raggrupparli in un unico file per facilità d'uso. – ryryan

1

Vorrei anche scommettere su un altro quadro. Ci sono quelli semplici con grandi comunità. Puoi aiutare te stesso in tre modi: iniziare con molti moduli contribuiti/una buona struttura, leggere il codice di alta qualità e ottenere supporto da una grande comunità.

Qui c'è una lista con molti framework e confronti popolari - phpframeworks.com. Potrei anche consigliarti CodeIgniter - buono per principianti, piuttosto semplice e basato su MVC allo stesso tempo.

2

Se si desidera utilizzare un quadro di riferimento per uso personale, è necessario utilizzare una delle offerte, open source affermati come CakePHP, symfony, Zend o CodeIgniter. Questi framework sono stati sviluppati e testati per anni da sviluppatori di talento e molto probabilmente soddisferanno le vostre esigenze. L'unica volta in cui è necessario creare il proprio framework è a scopo didattico o se i framework esistenti non soddisfano i requisiti. Non c'è bisogno di reinventare la ruota.

Da wikipedia:

Il quadro si propone di alleviare il overhead associato con comuni attività svolte in Web sviluppo. Ad esempio, molti framework forniscono librerie per l'accesso al database , i framework di modelli e la gestione delle sessioni, e spesso promuovono il riutilizzo del codice.

Questo è esattamente ciò che questi framework mirano a fare e hanno abbastanza successo.

Utilizzando questi, imparerai anche ad apprezzare le loro soluzioni e capire come usano OOP per lo sviluppo web, aumentando le tue conoscenze come sviluppatore.

+1

Non dimenticare CodeIgniter! – chigley

+0

@chigley: lo ha aggiunto. – webbiedave

+3

Un altro da considerare: Kohana: http://kohanaframework.org/ – GSto

2

Altri hanno risposto alla tua domanda quadro (costruisci solo qualcosa per il valore di apprendimento, altrimenti impara a usare uno dei migliori framework e librerie maturi esistenti) ma voglio solo indicare un piccolo nit con il tuo codice, l'intero punto di avere un sigillo $ prima che il var è che si può facilmente fare

$headers = "From:$from\r\n"; 

invece di

$headers = "From:"; 
$headers .= $from; 
$headers .= "\r\n"; 
+0

Per qualche strana ragione mi stava dando esattamente questo, un "$ da", invece dei dati effettivi memorizzati all'interno di $ da. – ryryan

+1

forse hai usato le virgolette singole invece delle doppie virgolette nel tuo test? – Pat

6

Come alcuni altri qui, vedo solo i guadagni positivi da un utente inesperto tenta di scrivere un quadro. Se stanno cercando opzioni esistenti come modelli, e in realtà stanno tentando di usare il nuovo codice e quindi identificano le sue debolezze con l'obiettivo di risolverle, può essere un ottimo modo per sviluppare rapidamente la conoscenza. Detto questo, per un utente molto nuovo, vorrei pensarci due volte prima di usarlo in un'applicazione di produzione; poi di nuovo, probabilmente non farà molta differenza se il codice di base dell'applicazione è scritto dallo stesso utente.

Detto questo, una struttura è molto architettonica per sua natura e quindi forse non è il posto migliore per iniziare. Una semplice libreria di codice di utilità è molto meglio, ed è esattamente ciò che l'OP sta facendo (a parte problemi di terminologia). Buon per lui.

Come sempre saltare sul carrozzone quadro esistente quando arriva il momento di fare sul serio, ho delle riserve profondamente radicate su questo. Prima di tutto, non esiste una struttura perfetta, o persino una struttura che sia più che marginalmente valida per ogni scopo. La maggior parte dei framework per scopi generici sono eccessivamente complicati bradipi di prestazioni rispetto al codice sintonizzato a mano per il suo scopo. Pertanto, per un team esperto che lavora su complesse applicazioni del mondo reale, una struttura GP sarà spesso una cattiva idea. Questo è il motivo per cui, quando si tratta di strutture di questo tipo, preferisco quelle, come Zend, che ti permettono di scegliere le funzionalità di cui hai bisogno senza dover saltare con entrambi i piedi.

Più criticamente, nei 30 anni che ho sviluppato software, ho visto molti quadri, anche quelli con una saturazione del mercato vicina al 100% e il sostegno dei principali fornitori, semplicemente morire. Quando ciò accade, gli sviluppatori sono bloccati. E no, essere open source non allevia questo problema. Se ci vogliono anni e anni di esperienza per sviluppare e mantenere una struttura di grandi dimensioni, come può essere una piccola squadra all'interno di un'azienda - spesso con solo una o due persone davvero esperte - supporre che mantenga il progetto realisticamente quando cade in disgrazia e inizia a morire? Questo succede anche con progetti di codice più piccoli: testimonia lo stato di morte in cui molte librerie PEAR, una volta popolari, si trovano ora.

1

Questo non risponde alla tua domanda quadro, ma se si utilizza:

$headers = "From:"; 
$headers .= $from; 
$headers .= "\r\n"; 

e:

sendmail($_POST['to'], $_POST['message'], $_POST['subject'], $_POST['from']); 

persone cercheranno di iniettare ulteriori intestazioni e-mail nella vostra $ dal campo da parte distacco

'Name\r\nAnyotherheader:date\r\n' 

al tuo $ da campo .

Per non parlare del problema delle persone che lo utilizzano per lo spam solo se si consente loro un campo $ _POST ['a'].

Problemi correlati