edición general
181 meneos
992 clics

PHP cumple 25 años [ENG]

"Announce: Personal Home Page Tools (PHP Tools)" Ese es el encabezado con el que Rasmus Lerdof anunció el nacimiento de Personal Home Page Tools (PHP Tools) version 1.0. el 8 de junio de 1995.

| etiquetas: php , cumpleaños , 25 años , lenguaje de programación
12»
  1. #9
    Eso que comentas de 40 conexiones y variables x, x2... eso pasa en mas gremios, no es unico.
    Todos hemos visto codigo que no se puede tocar proque nadie sabe como funciona, se cierran los ojos y se sigue adelante. Culpa de la empresa por coger a cualquiera y ponerlo a picar.

    Yo te contaria cosas que no creerias en el codigo, auntenticas basuras y chapuzas una encima de otra que no habia por donde cogerlo.

    Solo que el PHP ya de por si es un saco de mierda, perdon pero es asi.
  2. #77 Symfony es un cañón, es por eso que es la base tanto de Laravel como de Drupal 8 y 9.
  3. #89 te adjunto la imagen con el precio anual  media
  4. #5 Sigue haciendo una redirección rara "cuando pasa por menéame"
  5. #7 Ha.mejorado muchísimo estos últimos años
  6. #2 Lo mismo se podría decir del creador de C++
  7. #42 ¿Sintaxis bonita? Pocos lenguajes has visto tú.
  8. #37 Que el propio compilador pueda deducir el tipo de dato sin indicarlo.

    Ej:
    String texto = "hola"; // Sin inferencia
    var texto = "hola"; // Con inferencia
  9. #42 Entre el tener que andar poniendo self obligatoriamente y la ocurrencia de los __ en constructores y otros método mágicos...{0x1f624}
  10. Pues yo echo de menos Perl. Ojala todo el mundo aprendiera Mojolicious.
  11. #22 Lo del modelo de negocio de Jetbrains no tiene nombre.
  12. #37 Pues es cuando el propio lenguaje es capaz de "adivinar" el tipo aun cuando no se lo has declarado, por ejemplo:

    var a = 4

    Con eso el lenguaje infiere que el tipo de a es un entero. Si intentases luego setearle un string te daría un error de compilación porque el tipo es entero. Lenguajes modernos que van tendiendo cada vez más a la programación funcional como Swift o Kotlin lo tienen, aunque ya tiene su tiempo, si no recuerdo mal Haskell ya tenía esto desde hace décadas.

    En ese ejemplo parece una chorrada, pero es super útil cuando usas métodos con tipos genéricos y después de una cadena de funciones que aplican transformaciones (por ejemplo map) compruebas que el valor final tiene el tipo que esperabas (sobre todo si el IDE es bueno y te lo indica).

    Total, que puedes tener la "sencillez" de PHP pero con la robustez de un lenguaje de tipado fuerte.
  13. #25 Yo estrené y era beta tester de Dreamweaver desde sus inicios, y lo utilizamos hasta hoy (yo ya no trabajo en la capa de maquetación, así que ya no lo toco), y antes de eso, de Frontpage (que nunca me acabó de gustar).

    Pero antes de eso, mi primer editor WYSIWYG fue Netscape Composer, uno de los componentes de Netscape Communicator, que desde la versión 3, era una suite completísima. No fueron mis primeras páginas, no obstante. Puede que me equivoque, pero mi primera Web la realicé con el EDIT de MS-DOS, allá por septiembre de 1993.
  14. #65 El tema (y de ahí la importancia del IDE) es cuando el tipo viene de varias transformaciones, no directamente de la instanciación (que se ve claramente que tipo es como indicas). Y si esas transformaciones se vienen haciendo con funciones que aceptan genéricos ya no está tan claro, por eso es tan potente.
  15. #51 Laravel es una pasada
  16. #65 Completo un poco mi comentario para que se me entienda con un ejemplo sencillo  media
  17. #58 Menuda falacia, programa eso en GOTO. Hay buenos y malos lenguajes dependiendo de la tarea que se pretende hacer.
  18. #4 Insuperable no creo que sea la palabra... Yo creo que lo que si que ocurre con PHP y creo que es a lo que se ha debido el "éxito" en cuanto a su uso generalizado estos años atrás es a que su curva de aprendizaje es muy suave cuando se trata de soluciones rápidas.
  19. #11 Sí, creo que unos genéricos y un buen sistema de colecciones y similares, así como una reimplementación un poco más limpia y funcional de las funciones de colecciones (map, filter, reduce y las que no hay como flatmap, etc) era mucho más necesario que el último cambio de poder declarar propiedades tipadas...

    Una vez puedo declarar el tipo de entrada y de salida de una función... declarar el tipo de una property de una clase me da bastante igual. Sobre todo si programo en condiciones y mis funciones suelen tener menos de 10 líneas y menos de 5 en su mayoría...

    En resumen es mucho más útil poder hacer un

    public function addBooks (Collection<Book> $books): Collection<Book>

    que poder poner:

    private array $books;

    Esto último no aporta nada, lo primero me aporta robustez y me ahorra test unitarios al dejarlos implicitos en el propio código y pasar la responsabilida de su comprobacion al compilador (interprete en este caso) o analizador estático de código.

    Y como me molaría que se soportase algo para hintear funciones anónimas y obligar a que te pasen una funcion que recibe XTipo y devuelve YTipo o similar...
  20. #104 O habrá petado críticamente en el momento de salida, perdiendo toda la campañá de publicidad y el momentum inical.

    Hubo una empresa que por no tener tipado estático y desarrollar un programa en JS puso la direccion de una cartera Ethereum sin comillas en la configuración, se interpretó como número octal y todo el dinero fue a parar a la nada :shit: :shit: :shit:

    He tardado un poco en encontrar la noticia:

    www.businessinsider.es/pierden-medio-millon-criptomonedas-culpan-infor
  21. #124 Pero la realidad es que hay muchos negocios en PHP y poder hacerlos más robustos sin cambiar de lenguaje supone una barbaridad en lo referente a costes...
  22. #82 Lo de cobrarte X por usar el IDE es cierto a medias, realmente te cobran anualmente por versión, pero si dejas de pagar se supone que puedes seguir usando la última versión del IDE para la cual pagaste, pero claro, te quedas sin actualizaciones mientras no pagues...

    Pero claro, teniendo en cuenta que precisamente ahora en PHP están saliendo bastantes mejoras de tipado que afectan a la propia sintaxis... pues es una faena no tener esas actualizaciones si usas las últimas versiones de PHP.
  23. #127 Me parece que es bastante subjetivo el término antiguo cuando la mayoría de apps modernas tienen servidores o parte de sus microservicios en PHP, por no hablar de que sigue alimentado cientos de sitios web xD.

    Si con antiguo te refieres a la POO, no estoy de acuerdo, la POO sigue siendo el paradigma más extendido y le queda bastante recorrido ya que muchos de los problemas tienen un mapeo directo en Objetos. Otra cosa es que se estén añadiendo trazas de ProgramaciónFuncional porque para algunos casos concretos o algunas implementaciones facilite un código más limpio y conciso.

    Si te refieres a lo verboso, estoy de acuerdo, lenguajes como scala o kotlin son mucho menos verbosos... pero volvemos a lo mismo. ¿Hay programadores? ¿Puedes pagarlos? ¿Me cuesta más ir migrando poco a poco según avanza PHP o reimplementar?

    No me sorprende tanto el uso de PHP cuando hay cientos de programadores, haciendolos mucho más baratos por la oferta-demanda. Además de que el lenguaje es solo uno de los factores, PHP a nivel ecosistema es muy maduro y las facilidades de llevar algo del desarrollo a producción siguen siendo bastante top hoy en día.
  24. #109 Por eso digo “acompañado”. Un buen lenguaje con un buen IDE es un combo perfecto. Si tienes un buen IDE para un mal lenguaje, pues obviamente el IDE lo que va a intentar es ser un parche que cubra las carencias pero poco más. También pasa al revés, por muy bueno que sea el lenguaje, si el IDE no te ayuda una mierda o te está dando falsos positivos todo el rato pues es una carga más
  25. #122 public function addBooks(Book ...$books): self { ... }
    Solucionao.
    Deberías ponerte al día antes de criticar un lenguaje.
  26. #136 JAJAJAJAJAJA

    Mira, para empezar no debes asumir, ni mucho menos inventarte, el contexto de un trozo de código puesto ad hoc para ejemplificar algo concreto. Además, ese self pocho que has colocado no se va a comportar ni en tus sueños como lo que yo indicaba, para empezar porque self es la propia clase que contiene al método y si yo, por ejemplo, estoy en la hipotética clase Library y quiero ofrecer un hipotetico método getBooks y tipar que devuelve un objeto de tipo Collection con elementos del tipo Books, dista UNA BARBARIDAD de la guarrada que tú has colocado ahí y es, de hecho, imposible de tipar en PHP.

    Te pongo un ejemplo más directo a ver si puedes comprenderlo. Vamos a tipar un metodo constructor que necesita como entrada una colección de libros y otro que la necesita de cassettes, cada uno estara en su clase respectiva, no nos interesa para el ejemplo, tampoco nos interesa su interior:

    public function __construct(Collection<Book>){}

    public function __construct(Collection<Cassette>){}


    En PHP no puedes hacer eso y lo que te encuentras son docblocks del tipo:

    /**
    *@param Book[] $argument1
    */


    o

    /**
    *@param Cassette[] $argument1
    */


    Para que el IDE o el analizador de código estático tipo PHP Stan puedan interpretarlo y decirte que eres un paco y estás pasando el tipo de dato incorrecto.

    ¿La limitación? Pues que no es una carácteristica del lenguaje por lo que dependes de terceros y, además, que no puedes tipar el objeto genérico (Entry, HashMap, Collection, Array...) y si quieres un elemento de SPL o de cualquier librería como puede ser Doctrine y sus Collection pero con elementos de cierto tipo... pues, o te jodes y pones un if como una casa, o confías en que llegue sin que nadie la cague (a parte de poner un test).

    Ale, solucionao, para la próxima aprende un poco de POO y asegurate de entender de lo que se está hablando antes de venir a hacer el cantamañanas y encima con chulería, que los junior engreídos soléis acabar bastante mal.
  27. #12 precisamente los IDE lo solucionan desde que tengo uso de razon y beben de los docblock para permitirte indicar el tipo de cada uno de los argumentos.

    Por otra parte desde PHP 7 se soporta de forma nativa el tipado de argumentos y retornos. Sigue habiendo limitaciones
    como genéricos, por ejemplo, que no existen o algunas APIs muy vetustas como las funciones de manejo de colecciones o de strings que son muy inconsistentes.
  28. #138 vaya, al menos has ido rápido a la wikipedia y me has dado la razón.

    Si no entiendes que el objetivo de un ejemplo puesto en un minuto en un foro no es discutir si el ejemplo cumple un buen nivel de encapsulación, solid o el nombrado respetando el PSR... es que eres más limitado de lo que pensaba.

    Los genéricos son muy útiles por ejemplo en cientos de casos, y PHP no los tiene. Al menos tragate la restregada de mano por tu cara con un poco de dignidad, pelagatos.

    Venga, a tirar líneas de código, que en la última code review te han echado todo para atrás, paco.
  29. #140 Tú ha venido a decir chorradas con ejemplos malos de los que ahora te arrepientes, diciendo que en PHP no se puede tipar todo, y tu argumento se basa en tipos genéricos. Yo te he demostrado que en PHP sí se puede tipar todo.
    ¿Y vienes a por más?
    Date una vuelta y descansa, campeón.
  30. #141 diciendo que en PHP no se puede tipar todo, y todo tu argumento se basa en tipos genéricos. Yo te he demostrado que en PHP se puede tipar todo.

    Puedes mentir todo lo que quieras, paco. De hecho mi intervencion fue para defender PHP y simplemente puntualicé que me parecía más útil haber implementado genéricos en 7.4 que la posibilidad de tipar las properties, cuando ya puedo tipar valores de entrada y salida de los métodos desde 7.0.

    Eres tú el que se ha inventado una postura a la que atacar que nadie tiene y, como sabes que te has colado, te vas por las ramas y atacas a algo que está fuera del alcance del ejemplo propuesto.

    Sigue, sigue bailando que me diviertes :popcorn:

    Cuentame, ¿Qué más has aprendido ahora cuando has visitado la wikipedia para ver que era un genérico? Debes tener la cabeza calentita, que parece que estas cosas te cuestan.
  31. #142 que si quiere bolsa, señora!
  32. #143 ya no eres divertido, ahora solo eres un tonto humillado :-/
  33. #144 Señora, suélteme el brazo!
  34. #20 Dios Santo, con FrontPage empecé yo mis pinitos en HTML, que recuerdos... creando tablas y demás. La gente usaba Dreamweaver (Macromedia) pero nah !! Frontpage a muelte!!!!
  35. #20 Frontpage, me has retrotaido a los 90
  36. #41 Idealmente bien pagado, claro :-D. Pero me interesa más que sea fácil meter la cabeza en el sector. A partir de ahí ya veremos.
  37. #50 #52 #55 de ese tipo tienes el grandioso Rust con su compilador que es una maravilla

    Yo ahora mismo estoy haciendo cosas con Rust tiene un buen sistema de dependencia, y puedes hacer de todo, ahora lo más popular son librerías para audio, Webassembly el completo perfecto para js en lado del cliente, y hay ya frameworks web, hay gente pasando compiladores a Rust ya que es como una evolución lógica para C y casi tiene el mismo rendimiento.
  38. #64 es rápido cuando ya sabes todo las sintaxis, hay librerías pero no están todas creo que hay adaptadores para usar librerías en otro lenguaje compilados.
    Aquí tienes todas librerías que puedes instalar con cargo crates.io/
    Puedes empezar aprender Rust aquí intro.rustbridge.com/

    Yo lo estoy usando como web,un proyecto que tengo es usar una Raspberry pi con Rust y docker para controlar cosas domoticas de la casa uso rocket.rs/
  39. #81 Symfony siempre ha sido mejor para rest que Laravel, ya que laravel es un todo en uno.

    Symfony 2 en adelante siempre ha estado hecho a bases de Bundles, no necesitas un Bundle lo eliminas y no pasa nada, ej, Twig, symfony form, etc. en cambio en Laravel es imposible desactivar blade aunque no lo uses, quitar eloquent es tarea muy difícil.

    Más que una competición es flexibilidad, necesitas hacer un programa que solo guarde un tabla y un formulario lo harás antes en Laravel y ya todo integrado, pero estás atrapado en usar eloquent, en usar blade, etc, es rápido y muy funcional, pero tiene muchas funciones acopladas, yo soy de lso que usan Laravel y odio sus sistemas de Fake Facade y App Container no las uso, todo por DI en clases, al tener autowiring si no es algo especifico es muy rápido.

    En Symfony tienes todo eso pero lo tienes que configurar más si empiezas sin nada, desde 4.4 volvieron al sistema de poder elegir que esqueletos quieres un con todo o uno pelado y luego tu montas los huesos.

    Prueba los 2 y usa los 2 es mi consejo.

    pd: link a lo que me refiero en symfony: symfony.com/download
    apartado: "Creating Symfony applications"
  40. #84 Que yo sepa ahora mismo la licencia para uso personal de IDEA son 14.90 € / mes.
  41. #91 Más o menos no es el framework la base son sus librerías, sobre todo la librería base Symfony Http Fundation symfony.com/doc/current/components/http_foundation.html

    Una de las lecturas mas entretenido de symfony era hacer tu propio framework así comprendes las entrañas de cosas como symfony o laravel symfony.com/doc/current/create_framework/index.html
  42. #94 Ahhh filho da puta agora sim entendo. :roll: Eso es PhpStorm, no IntelliJ IDEA.
  43. Esta entrada es un perfecto detector de programadores cuñados xD Vaya burradas se están diciendo, imagino que lo que saben de php se reduce a lo que vieron en un fp hace una década.
  44. #92 ¿me estás hablando de una función en el mismo fichero? Porque si es una función que viene de un import la cosa se complica. Si una función me devuelve un objeto y quiero saber que métodos tiene ese objeto sin ir a buscar la clase, peor.
    Lo último que he probado ha sido eclipse con versiones de php 5.x (es lo que había en el servidor, solo he modificado algún script, no desarrollo proyectos completos ahí y no puedo cambiar todo a php7). Conseguí que funcionara añadiendo comentarios para definir el tipo en cada declaración de cada variable. Poco serio. Refactorizar debe ser como una peli de terror de serie B.
  45. #4 ¿Cómo va eso? Mete más palabras porfa.
  46. #31 Aquí no estoy de acuerdo. Un buen lenguaje de programación no puede medirse por su IDE. Otra cosa es que su ecosistema sea una mierda, pero eso no tiene que ver con el lenguaje como tal.

    A mi me gusta PHP, me ha dado de comer durante muchos años y efectivamente el cambio desde php5 (y luego php5.4 y finalmente php7) marcó un punto de inflexión. Pero PHP está mal diseñado y tiene inconsistencias que otros lenguajes no tienen.
  47. #111 Hay programas mal construidos en PHP. Aha.
  48. #108 Tema Salario, yo estoy como Senior Developer con PHP y estoy por encima de los 40K.

    Es verdad que hay mucho proyecto mal hecho pero en 6 años solo he visto un código mal estructurad y espagueti, pero el trabajo de ahí era coger la lógica y pasarla a un framework moderno con PHP esto fue en el 2015, a partir de ahí yo no he vuelto usar PHP a pelo, todo con Symfony o Laravel, y 95% de todos los trabajos actuales de Barcelona en PHP es Laravel o Smmfony, alguno queda en Zend, Codeigniter.
    Desde PHP 7 todo a cambiado, rendimiento, frameworks, etc.
  49. #108 PHP no es WordPress y aplicaciones en MVC.

    En sitios donde pagan 40k o más no suelen utilizar arquitecturas MVC, sino otras más complejas. Lo que no puedes pretender es cobrar >40k y solo conocer la arquitectura más básica.

    Estoy hablando de DDD, arquitectura hexagonal, sistemas distribuidos, colas de mensajería, Event-Sourcing, sistemas de caché y un largo etcétera.

    Las empresas que utilizan estas herramientas y arquitecturas son aquellas que suelen pagar esos sueldos, porque son plataformas y empresas maduras tecnológicamente, independientemente del lenguaje. No creo que te vayan a pagar >40k por hacer páginas web en Drupal o WordPress.

    Intenta escalar una plataforma que reciba cientos de miles de visitas con una simple arquitectura MVC. Buena suerte.
  50. #105 En Netbeans, si se puede inferir el tipo o la clase, te lleva a la clase o al método con un click, y te muestra los métodos. Creo que para PHP es bastante competente, aunque según el caso, puede que tengas que añadir el comentario.
  51. #105 no por mal, pero si tú experiencia en PHP es con eclipse y php 5.x es como si hablamos de aviación comercial usando como ejemplo el avión de los hermanos Wright

    Prueba phpstorm y php7.x. Es que es otro mundo, nada que ver ;)
  52. #148 No hay nada más feo e inconsistente que JavaScript.

    Pero PHP también tiene lo suyo: notaciones camelCase/snake_case para el nombre de funciones, nombramiento confuso de estas funciones, ausencia de una guía de estilo oficial, notación muy sui géneris ("." para concatenar, includes y requires, ausencia de un builtin system para importar paquetes -namespaces en php-, símbolo $...), problema needle-haystack en los parámetros de funciones y tipado a gusto del consumidor. Y seguro que me estoy dejando cosas.

    Aún así, me gusta PHP (pero python mucho más).
  53. #154 No me digas... Me refiero a los nombres de las builtin functions. Y te equivocas, las recomendaciones de php-fig no son oficiales. php-fig está compuesto por algunos de los programadores y proyectos mas relevantes de php.
  54. #9 La POO es un paradigma de desarrollo, no es ninguna garantía de calidad ni de que un programa vaya a estar mejor o peor hecho. Un ejemplo lo tienes en Django, que no te obliga a aplicar la POO y la calidad del producto sigue siendo muy alta.

    Insisto, um programador junior te va a jacet una mierda de programa en PHP o en C++. Claro que para hacer una web, que es el software que más se desarrolla ahora, no va a coger C++.
  55. #9 ademas de lo que dices un "plus" es que puedes guarrear a tope el codigo y casi siempre sigue funcionando todo, aunque funcione mal. Así que salen "programadores" PHP de debajo de las piedras.
  56. #30 Eso venía a decir, además que tiene unos frameworks muy maduros ya muy interesantes.
  57. #137 Sí, en php no existe (aún) el tipo genérico. Pero...
    class BookCollection { private array $books; public function __construnct(Book ...$books) { $this->books = $books; } ... }
    Solucionao.
    Y de paso puedo meter ahí funcionalidad exclusiva para gestionar libros, que tú no puedes meter en tu colección genérica.
    Ale, a pastar, nene, que tampoco es plan que te forme yo aquí, ni de explicarte por qué tus ejemplos exponen implementación interna, error típico de juniors que se pasan el encapsulamiento por el forro.
  58. PHP, pero esto no era como programar en una bañera borracho?
    No se, es un saco de basura lo poco que lo vi, sinceramente.
12»
comentarios cerrados

menéame