PHP en el 2015

Post on 17-Feb-2017

1.029 views 0 download

Transcript of 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