2010-09-29 14 views
8

Estoy interesado en construir mi propio framework php para mi uso personal para facilitar mi vida de codificación. Estoy haciendo esto porque estoy bastante (algo así como) acostumbrado a php ahora, y parece que no puedo usar cualquier framework.Construyendo propio framework php

Tengo una idea de realizar muchas funciones en un archivo .php. Al igual que he empezado a hacer, sor para la función de envío de correo He simplificado que (para mi 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); 
} 

Esto entonces será utilizado en un formulario de contacto:

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

Esta función de correo funciona para mi.

Sin embargo, no estoy seguro si esto es correcto para hacer un marco como este. He buscado clases y objetos para PHP, pero no puedo entenderlos, ya que no hay un tutorial fácil de entender.

+8

Te sugiero que leas qué estructuras realmente son ... lo que estás describiendo es simplemente una biblioteca de funciones, no un marco ... http: //www.slideshare.net/muhammadghazali/a-good-php-framework-for-beginners-like-me podría proporcionarle una lectura útil –

+2

No lo animo a crear su propio framework a menos que tenga un conocimiento profundo de PHP y conozca muy bien varios frameworks existentes. Creé mi propio framework en el pasado y simplemente perdí mi tiempo, descubriendo que algunos frameworks existentes son mucho mejores que los míos, y están escritos por desarrolladores mucho más experimentados que yo. –

+1

Su fraseología 'marco' fue desafortunado como se destaca a continuación. Adelante, construye tu conjunto de código de utilidad. Ese es un enfoque muy útil para entrar en PHP. Y estarás mucho más familiarizado con eso. (También OOP no es el pináculo de la programación. No en PHP.) – mario

Respuesta

33

La gente le dirá que no escriba su propio marco, para usar uno existente. No los escuches. Es una buena experiencia de aprendizaje y lo ayudará a comprender los conceptos que harán que otros marcos tengan mucho más sentido para usted.

que personalmente necesitaba entender 2 cosas mejor antes de poder utilizar otros marcos de los pueblos (y, obviamente, escribir mi propia):

  1. OOP
  2. MVC

Pasé días leyendo cada Tutorial OOP en PHP y cada tutorial/página wiki en MVC. Luego, como experiencia de aprendizaje, escribí mi propio marco. Luego aprendí de mis errores y comencé desde cero y escribí otro marco. Probablemente escribí 5 versiones. Entonces decidí probar el encendedor de código. Después de leer y practicar, finalmente lo entendí.

Desde entonces solo he estado usando frameworks de otras personas.

+7

+1 Acepto, use este proyecto como práctica para aprender OOP. Entonces, incluso si decide usar otros marcos en lugar de uno de práctica, sabrá OOP y sabrá cómo utilizar esos marcos de trabajo mejor. –

+1

Creo que usar un marco establecido es una excelente manera de perfeccionar tus habilidades de desarrollo de OOP al ver de primera mano cómo se pueden aplicar mejor al desarrollo web. – webbiedave

+1

estoy de acuerdo, pero primero debe comprender los conceptos subyacentes – Galen

1

Esto será quizás demasiado duro, pero: no considere crear un marco propio a menos que comprenda completamente la programación orientada a objetos. El conocimiento de OOP evolucionará a partir de su programación de procedimientos cuando gane más experiencia.
Sin embargo, crear una archivo PHP que contenga las funciones más utilizadas es una buena idea, y yo diría que síganlo. Pero no lo llame marco :)

+0

¿Y cuál es la mejor manera de obtener conocimiento? Para cometer errores (ya que, por lo tanto, puede aprender de ellos). ¿Y cuál es la mejor manera de cometer errores? Intentar hacer algo fuera de su ámbito de conocimiento actual (justo afuera) ... Entonces, ¿cuál es la mejor manera de entender OOP? Para escribir OOP! Construir algo así como un marco puede ser una gran herramienta para aprender cómo funciona el OOP ... Demasiadas personas en mi humilde opinión simplemente sé cómo usar un marco (como Zend o lo que sea), no cómo y, lo que es más importante, ** por qué ** funciona ... Un poco de experimentación y fracaso pueden ser de gran ayuda para obtener experiencia ... – ircmaxell

+0

@ircmaxwell Haces un buen punto, pero ten en cuenta que puede ser difícil aprender de tus errores. Puedes escribir algo que compila y hace lo que quieres que haga, pero eso no significa que no haya ningún error allí – GSto

+0

@ircmaxell: Sí, eso es lo que quise decir con "evolucionar desde la programación de procedimientos". Tampoco dije "no vaya por eso", solo dije "no lo llame marco". –

1

Admirable como puede ser si usted ni siquiera sabe cuáles son los fundamentos básicos de la construcción de un marco, especialmente los patrones, y no están totalmente fundamentados en OOP y cómodo escribirlo entonces, ¿cómo esperas lograr tu objetivo? No necesariamente aprenderá mucho escribiendo código usted mismo, es decir, si escribe un código incorrecto 40 veces, no le está enseñando nada (esto no es una crítica personal de usted, por cierto) sino leyendo el código de otras personas, que será a la vez bueno, malo e indiferente, entonces aprenderás.

1

Por lo general, un Marco tiene un objetivo específico. Un Framework puede ser compatible con un CMS, un motor 3D, un sistema de acceso a datos, etc. ... a menudo puede ver varios marcos utilizados juntos para lograr el objetivo final, como el uso de Spring, Hibernate y JavaEE para construir un sistema basado en Java. Aplicación web.

Desde el punto de vista, estás recopilando todas tus funciones favoritas en un solo archivo (¿o las agrupas en diferentes archivos por funcionalidad?). Esto puede ser útil, pero aún no lo llamaría un marco. Es realmente una biblioteca. Si todas sus funciones están pensadas para admitir una funcionalidad de correo electrónico sofisticada, aprenda OOP y cree un marco cuyo único objetivo sea proporcionar una interfaz fácil de usar para la funcionalidad de correo electrónico de lujo.

+0

Estoy planeando agruparlos en un solo archivo para facilitar su uso. – ryryan

1

También apostaría por otro marco. Hay otros simples con comunidades grandes. Puede ayudarse a sí mismo de tres maneras: comience con muchos módulos contribuidos/buena estructura, lea el código de alta calidad y obtenga el apoyo de una gran comunidad.

Aquí hay una lista con muchos frameworks populares y comparación - phpframeworks.com. También podría recomendarte CodeIgniter: bueno para principiantes, bastante simple y basado en MVC al mismo tiempo.

2

Si desea utilizar un marco para uso personal, se debe utilizar una de las ofertas de origen establecidas, abiertos como CakePHP, symfony, Zend o CodeIgniter. Estos marcos han sido desarrollados y probados durante años por talentosos desarrolladores web y lo más probable es que satisfagan sus necesidades. La única vez que debe crear su propio marco es con fines educativos o si los marcos existentes no se ajustan a sus requisitos. No hay necesidad de reinventar la rueda.

De wikipedia:

El marco tiene como objetivo aliviar la sobrecarga asociada con actividades comunes que se realizan en Web desarrollo. Por ejemplo, muchos marcos proporcionan bibliotecas para el acceso a la base de datos , marcos de plantillas y administración de sesión, y a menudo promueven la reutilización de códigos.

Eso es exactamente lo que pretenden hacer estos marcos y son bastante exitosos.

Al usar esto, también aprenderá a apreciar sus soluciones, así como a entender cómo usan OOP para el desarrollo web, aumentando su conocimiento como desarrollador.

+1

¡No olvide CodeIgniter! – chigley

+0

@chigley: añadido. – webbiedave

+3

Otra que vale la pena considerar: Kohana: http://kohanaframework.org/ – GSto

2

Otros han respondido a su pregunta sobre el marco (solo construya algo para el valor de aprendizaje, de lo contrario aprenda a usar uno de los mejores frameworks maduros existentes y librerías) pero solo quiero señalar una pequeña nit con su código, todo el punto de tener un sigilo $ antes de la var es que se puede hacer fácilmente

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

en lugar de

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

Por alguna extraña razón, me estaba dando exactamente eso, un "$ from", en lugar de los datos reales almacenados dentro del $ from. – ryryan

+1

tal vez usaste comillas simples en lugar de comillas dobles en tu prueba? – Pat

6

al igual que algunos otros aquí, sólo veo las ganancias positivas de un usuario sin experiencia de intentar escribir un marco. Si buscan las opciones existentes como modelos y, en realidad, intentan usar el nuevo código y, por lo tanto, identifican sus debilidades con el objetivo de corregirlas, puede ser una excelente forma de desarrollar conocimiento rápidamente. Dicho esto, para un usuario muy nuevo, tal vez lo pensaría dos veces antes de usarlo en una aplicación de producción; por otra parte, probablemente no va a hacer mucha diferencia si el código del núcleo de la aplicación está escrito por el mismo usuario.

Habiendo dicho eso, un marco es muy arquitectónico por naturaleza y quizás no sea el mejor lugar para comenzar. Una biblioteca simple de código de utilidad es mucho mejor, y es exactamente lo que hace el OP (aparte de los problemas de terminología). Bien por él.

En cuanto a subirse siempre en el carro del marco existente cuando llega el momento de ponerse serio, tengo profundas reservas sobre eso. En primer lugar, no existe un marco perfecto, o incluso un marco que sea más que marginalmente bueno para cada propósito. La mayoría de los marcos de propósito general son perezosos de rendimiento excesivamente complicados en comparación con el código ajustado a mano para su propósito. Por lo tanto, para un equipo experimentado que trabaje en aplicaciones complejas del mundo real, un marco GP a menudo será una mala idea. Esta es la razón por la cual cuando se trata de tales marcos, prefiero aquellos, como Zend, que le permiten seleccionar cuidadosamente la funcionalidad que necesita sin tener que saltar con ambos pies.

Más críticamente, en los ~ 30 años que he estado desarrollando software, he visto muchos marcos, incluso aquellos con saturación de mercado cercana al 100% y el respaldo de los principales proveedores, simplemente mueren. Cuando esto sucede, los desarrolladores quedan varados. Y no, ser de código abierto no alivia este problema. Si a muchas personas experimentadas les lleva años desarrollar y mantener un marco amplio, ¿cómo se supone que un pequeño equipo dentro de una empresa -con frecuencia con solo una o dos personas realmente experimentadas- mantiene el proyecto de manera realista cuando cae en desgracia y comienza a morir? Esto también ocurre con proyectos de código más pequeños: atestigüe el estado de muerte en el que se encuentran ahora muchas de las bibliotecas de PEAR que alguna vez fueron populares.

1

Esto no responde a su pregunta marco, pero si se utiliza:

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

y:

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

La gente va a tratar de inyectar cabeceras de correo electrónico adicionales en su campo desde $ por publicar

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

a su $ de campo.

Sin mencionar el problema de las personas que simplemente lo usan como spam si les permite un campo $ _POST ['to'].