Download - PHP en el 2015
<?php en el 2015@asiermarques
meetup.com/PHP-Sevilla
Un poco de historia
@rasmus
1994Se estrena Stargate y Pulp Fiction
Rasmus Lerdorf (@rasmus) crea un toolkit CGI en C llamado “Personal Home Page Tools” para hacer su currículum online.
1995-1996Rasmus Lerdorf reescribe en dos ocasiones PHPTools desde cero para crear finalmente lo que se conoció como PHP/FI
En 1998 se llegó a los 60.000 dominios que utilizaban php, el 1% de Internet.
2000Andi Gutmans y Zeev Suraski crean el motor Zend, que da vida a php4.
PHP4 introduce algunas características importantes como una aproximación a la Orientación a Objetos.
Aparecen canales donde conseguir extensiones y librerías como PECL y PEAR
2004Aparece php5 con un potente y renovado motor Zend.
La orientación a objetos es la característica y mejora principal de este lenguaje.
Se consolidan motores de templates como Smarty, que permite eliminar el código espagueti
Se introduce Reflection.
2008Aparece php5.3.
Mejora el rendimiento e introduce características nuevas como los namespaces y los closures.
Maduran y se establecen frameworks que hacen uso de patrones de diseño y buenas prácticas como Symfony, CakePHP o ZendFramework.
2011Aparece php5.4
Mejora el rendimiento e introduce características nuevas como los namespaces y los closures.
Mejora la sintaxis del lenguaje, se introducen nuevas features como Traits y un servidor web embebido.
Empieza a desarrollarse composer.
2015
php7
declare(strict_types=1);
function add(int $a, int $b): int {
return $a + $b;
}
Soluciones en phppara el día a día del desarrollo web
Coding Standars
PSR-1 y PSR-2
Symfony y Zend coding standars
PSR-4
Dependencias
Composer
packagist.org
HTTP
HTTP Foundation
ZendHTTP
Templating
Twig
Blitz (Creado y utilizado por Badoo.com)
<!DOCTYPE html><html> <head> <title>{%block title ‘título por defecto’%}</title> </head> <body>
{% block body %}{% endblock %}
{% block javascript %}{% endblock %}
</body></html>
{% extends ‘layout.html.twig’ %}
{% block title ‘Últimos artículos’ %}
{% block body %}
{% for item in posts %}
<h1>{{ post.title }}</h1>
{% endfor %}
{% endblock %}
Assets
Assetic
WPassetic
{% javascripts‘/js/jquery.min.js’‘/js/bootstrap.min.js’‘/js/app.js’‘/js/app.module.js’ %}
<script src="{{ asset_url }}”></script>
{% endjavascripts %}
Bases de datos
PDO
Doctrine2
Propel
Eloquent
$entityManager = $doctrine->getManager();
for($i = 0; $i<100; $i++){
$post = new Post(); $post->setId( $i ); $post->setName( “Sin título” + $i );
$entityManager->persist( $post );
}
$entityManager->flush();
i18ni18n
• mbstring
• Symfony translation Component
i10n
• intl
• twig intl extension
{{ 1122.55|localizedcurrency(‘EUR’, ‘es’) }}
//1.122,55
{{ 1122.55|localizedcurrency(‘EUR’, ‘en’) }}
//1,122.55
{{ “+1day”|localizeddate(‘short’,’none’, ‘es’) }}
//17/10/15
Línea de comandos
Symfony Console Component
Zend Command
class SayHelloCommand extends Command{ protected function configure() { $this->setName(‘say:hello’) ->addArgument('name'); }
protected function execute(InputInterface $input, OutputInterface $output) { $name = $input->getArgument(‘name');
if ($name) { $text = 'Hello '.$name; } else { $text = 'Hello'; }
$output->writeln($text); }}
Frameworks
Symfony2
Laravel
Zend
YII y otros…
MicroFrameworks
SlimPHP
Silex
$app = new Silex\Application();
$app->get( '/hola/{name}', function($name) use($app) { return 'Hola ‘. $app->escape($name);
});
$app->run();
Testing
PHPUnit
Behat
IC/EC con Jenkins, codeship, travis…
Inyección de dependencias
Symfony DependencyInjection Component
Pimple
CMS
WordPress
Drupal
Bolt
Joomla y otros…
eCommerce
Prestashop
Magento
ElCodi y otros
Deploy
Magallanes
Ansible
Recomendacionesphptherightway.com
coding standars
Inyección de dependencias
Testing
Deploy e IC
GraciasAsier Marqués @asiermarques