{"id":194,"date":"2015-10-31T11:26:22","date_gmt":"2015-10-31T16:26:22","guid":{"rendered":"https:\/\/wjharil.com\/blog\/?p=194"},"modified":"2017-10-20T15:19:04","modified_gmt":"2017-10-20T20:19:04","slug":"tips-programadores-inician-php","status":"publish","type":"post","link":"https:\/\/wjharil.com\/blog\/tips-programadores-inician-php\/","title":{"rendered":"Tip&#8217;s para programadores que se inician con PHP"},"content":{"rendered":"<p>Hoy veremos algunos <strong>tip&#8217;s para programadores que reci\u00e9n inician su largo camino con PHP<\/strong> (listo, lo aclar\u00e9 para que no me bombardeen!) y as\u00ed puedan llevar una mejor <strong>estructura optimizada<\/strong> de sus peque\u00f1os hijos. Se recomienda aplicarlo para los que a\u00fan no usan <strong>frameworks que siguen el modelo MVC<\/strong>. La lista, no tiene ning\u00fan orden de importancia, todos son importantes \ud83d\ude42<\/p>\n<h2>Tip&#8217;s PHP<\/h2>\n<p><a class=\"lightbox\" href=\"https:\/\/wjharil.com\/blog\/wp-content\/uploads\/2015\/10\/php-tips-2.jpg\"><img decoding=\"async\" loading=\"lazy\" class=\" size-full wp-image-197 aligncenter\" src=\"https:\/\/wjharil.com\/blog\/wp-content\/uploads\/2015\/10\/php-tips-2.jpg\" alt=\"php tips 2\" width=\"500\" height=\"286\" srcset=\"https:\/\/wjharil.com\/blog\/wp-content\/uploads\/2015\/10\/php-tips-2.jpg 500w, https:\/\/wjharil.com\/blog\/wp-content\/uploads\/2015\/10\/php-tips-2-300x172.jpg 300w\" sizes=\"(max-width: 500px) 100vw, 500px\" \/><\/a><\/p>\n<p>Aqu\u00ed, inicio los<strong> 6 tip&#8217;s<\/strong> que te recomiendo a la hora de programar en php (vuelvo a aclarar, si reci\u00e9n empiezas).<\/p>\n<h3>1. No usar rutas relativas, en su lugar definir ROOT<\/h3>\n<p>Es muy recomendable, <strong>no usar las rutas relativas<\/strong> (como \u00ab..\/..\/script\/archivo.php\u00bb) ya que si nos encontramos en distintos archivos, \u00e9sto puede variar y nos puede ocasionar m\u00e1s de un problema. Lo mejor, ser\u00eda <strong>definir una constante<\/strong> que podemos llamar \u00abROOT\u00bb y a ella asignarle las constantes _FILE_ que obtendr\u00e1 la ruta completa:<\/p>\n<pre class=\"lang:php decode:true\">define('ROOT', pathinfo (__FILE__, PATHINFO_DIRNAME));\r\nrequire_once (ROOT. '..\/..\/lib\/some_class.php');\r\n\/\/ resto del c\u00f3digo<\/pre>\n<h3>2. Evitar el uso de require_once, include, require, include_once<\/h3>\n<p>Cuando desarrollamos un proyecto, nos vemos en necesidad de hacer llamadas a clases o librer\u00edas desde otros archivos y para ello, usamos r<strong>equire_once, include<\/strong>, etc; los cuales son bastantes primitivos debido a que hacemos llamado a la ruta relativa del archivo. Para ello, podemos usar la siguiente funci\u00f3n que nos ayudar\u00e1 mucho a <strong>optimizar las llamadas<\/strong>, adem\u00e1s de verificar si existe o no dicha librer\u00eda \/ clase.<\/p>\n<pre class=\"lang:php decode:true\">function load_class($class_name)\r\n{\r\n    \/\/ruta de acceso al archivo de clase\r\n    $path  = ROOT. '\/lib \/'.$class_name.'.php');\r\n    if(file_exists($path))\r\n    {\r\n        require_once ($path);\r\n    }\r\n}\r\nload_class('database');\r\nload_class('mail');<\/pre>\n<h3>3. Mensajes de estado por consulta, etc<\/h3>\n<p>Bien, \u00e9ste punto es muy interesante debido a que lo vemos aplicado en<strong> frameworks php<\/strong>. Se trata de usar sesiones para mostrar mensajes luego de realizar algun tipo de consulta (ingreso de datos incorrectos, usuario inv\u00e1lido, etc).<\/p>\n<p>Definiendo un poco sobre qu\u00e9 es exactamente, les pongo el ejemplo de que hagamos un cambio en una base de datos desde php, pero queremos mostrar un mensajito de \u00abse ha realizado el cambio\u00bb. Lo normal y precario ser\u00eda enviarlo por una variable tipo GET, pero ser\u00eda muy antiest\u00e9tico, y&#8230; tonto.<\/p>\n<p>Para ello, podemos crear una funci\u00f3n que almacene el mensaje y otra que recupere dicho mensaje. Ojo, que debemos tener <strong>session_start()<\/strong> en cada p\u00e1gina (en la primera l\u00ednea \ud83d\ude42 ):<\/p>\n<pre class=\"lang:php decode:true\">function set_flash($msg)\r\n{\r\n    $_SESSION['mensaje'] = $msg;\r\n}\r\nfunction get_flash()\r\n{\r\n    $msg = $_SESSION['mensaje'];\r\n    unset($_SESSION['mensaje']);\r\n    return $msg;\r\n}<\/pre>\n<p>Y as\u00ed, podr\u00edamos poner en pr\u00e1ctica dicha funci\u00f3n:<\/p>\n<pre class=\"lang:php decode:true \">&lt;?php\r\nif($_POST)\r\n{\r\n    set_flash('Datos post enviados');\r\n}\r\n?&gt;\r\n&lt;html&gt;\r\n&lt;body&gt;\r\nEl mensaje es : &lt;?php echo get_flash(); ?&gt;\r\n&lt;form&gt;\r\n...\r\n&lt;\/form&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;<\/pre>\n<h3>4. Omitir la etiqueta de cierre PHP si es una librer\u00eda o clase<\/h3>\n<p>Este consejo, es muy importante. As\u00ed que no olvides ponerlo en pr\u00e1ctica ya que te evitar\u00e1 muchos problemas \ud83d\ude42<\/p>\n<pre class=\"lang:php decode:true \">class super_class\r\n{\r\n    function super_funcion()\r\n    {\r\n        \/\/ s\u00faper c\u00f3digo\r\n    }\r\n}\r\n\/\/ no cerramos la etiqueta php<\/pre>\n<p><strong>\u00bfWilliams, por qu\u00e9?.<\/strong><br \/>\nPues, la raz\u00f3n es que podemos generar un espacio al cerrar la etiqueta php ya que nuestro archivo lo tomar\u00e1 como un \u00abecho\u00bb y por lo tanto, generar\u00e1 error de headers (cabeceras).<\/p>\n<h3>5. Comprobar si el formulario ha sido enviado por POST<\/h3>\n<p>Esto es importante para evitar que se acceda a un script que se debe <strong>ejecutar s\u00f3lo si se ha enviado por m\u00e9todo POST<\/strong>.<br \/>\nLo mejor, es validar antes. Puedes hacerlo de \u00e9sta sencilla forma y evitarte futuros problemas:<\/p>\n<pre class=\"lang:php decode:true\">if($_SERVER['REQUEST_METHOD'] == 'POST' &amp;&amp; isset($_POST['submit']))\r\n{\r\n\t\/\/Ejecutar c\u00f3digo\r\n}<\/pre>\n<p>Con eso, <strong>puedes ser feliz<\/strong>.<\/p>\n<h3>6. \u00bfTienes muchas funciones? hazlas una clase!<\/h3>\n<p>Si, por ejemplo tienes funciones como \u00e9stas:<\/p>\n<pre class=\"lang:php decode:true \">function  utility_a ()\r\n{\r\n    \/\/ Esta funci\u00f3n hace una cosa utilidad como el procesamiento de cadenas\r\n}\r\nfunction  utility_b ()\r\n{\r\n    \/\/ Esta funci\u00f3n hace que la utilidad otro como el procesamiento de base de datos\r\n}\r\nfunction  utility_c ()\r\n{\r\n    \/\/ Esta funci\u00f3n es ...\r\n}<\/pre>\n<p>Lo mejor, es definirlo como una <strong>clase<\/strong> para mantener un orden de estructura adecuado:<\/p>\n<pre class=\"lang:php decode:true\">class  Utilidad\r\n{\r\n    public static function utility_a ()\r\n    {\r\n    }\r\n\r\n    public static function utility_b ()\r\n    {\r\n    }\r\n\r\n    public static function utility_c ()\r\n    {\r\n    }\r\n}\r\n\r\n\/\/ y llamarlos como\r\n\r\n$a = Utilidad::utility_a();\r\n$b = Utilidad::utility_b();<\/pre>\n<p><strong>\u00bfLa ventaja de hacer \u00e9sto?<\/strong> es que si tenemos funciones similares en otras clases, no causar\u00e1 efecto ya que estamos definiendolo por cada clase.<\/p>\n<p>Estos son <strong>6 recomendaciones si eres principiante<\/strong>, ojo que hay muchas m\u00e1s (puedes visitar <a href=\"http:\/\/www.binarytides.com\/35-techniques-to-enhance-your-php-code\/\">este link<\/a> para que puedas seguir leyendo la fuente original). Si tienes otro tip que comentar, no lo dudes y comparte con otros \u00ab<em>phperos<\/em>\u00ab.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hoy veremos algunos tip&#8217;s para programadores que reci\u00e9n inician su largo camino con PHP (listo,<br \/><a class=\"moretag\" href=\"https:\/\/wjharil.com\/blog\/tips-programadores-inician-php\/\">Continuar Leyendo...<\/a>","protected":false},"author":1,"featured_media":196,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[42],"tags":["php","recomendaciones","tips"],"featured_image_src":"https:\/\/wjharil.com\/blog\/wp-content\/uploads\/2015\/10\/php-tips.jpg","categorias":["Facebook","Fuera de tema","Recursos","Tutoriales"],"_links":{"self":[{"href":"https:\/\/wjharil.com\/blog\/wp-json\/wp\/v2\/posts\/194"}],"collection":[{"href":"https:\/\/wjharil.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wjharil.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wjharil.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wjharil.com\/blog\/wp-json\/wp\/v2\/comments?post=194"}],"version-history":[{"count":3,"href":"https:\/\/wjharil.com\/blog\/wp-json\/wp\/v2\/posts\/194\/revisions"}],"predecessor-version":[{"id":199,"href":"https:\/\/wjharil.com\/blog\/wp-json\/wp\/v2\/posts\/194\/revisions\/199"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wjharil.com\/blog\/wp-json\/wp\/v2\/media\/196"}],"wp:attachment":[{"href":"https:\/\/wjharil.com\/blog\/wp-json\/wp\/v2\/media?parent=194"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wjharil.com\/blog\/wp-json\/wp\/v2\/categories?post=194"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wjharil.com\/blog\/wp-json\/wp\/v2\/tags?post=194"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}