SlideShare a Scribd company logo
1 of 87
Download to read offline
@felixgomezlopez
PHP 7 Evolution
@felixgomezlopez
@felixgomezlopez
@felixgomezlopez
0. CHRONOLOGY
@felixgomezlopez
1995-2016 (21 YEARS OF PHP)
Version Release date
Personal Homepage Tools (PHP Tools) Version 1.0
PHP/FI 2
June 8th
1995
November 1997
PHP 3 June 1998
PHP 4 May 2000
PHP 5 July 2004
PHP 5.3/5.4 June 2009
PHP 7 December 2015
= PHP 6 - UNICODE
@felixgomezlopez
¿QUÉ FUE DE PHP6?
https://wiki.php.net/rfc/php6
● Intento fallido de salto de versión
● Iniciado en 2005 y finalizado en 2010
● Se integraron features en PHP 5.3 y 5.4
● Después de descartar UTF-16, intl se distribuyó como parte de PHP 5.3
y exponía las funcionalidades de la librería ICU.
● Se llegaron a publicar libros y se dieron charlas, pero nunca vió la luz
@felixgomezlopez
CRONOLOGíA PHP (21 AÑOS)
Versión Tiempo de vida
Personal Homepage Tools (PHP Tools) Version 1.0
PHP/FI 2
~ 2 años
~ 1 año
PHP 3 ~ 2 años
PHP 4 ~ 2 años
PHP 5 ~ 11 años
@felixgomezlopez
VERSIONES ACTUALES
http://www.php.net/supported-versions.php
@felixgomezlopez
PORCENTAJES DE USO
http://w3techs.com/technologies/details/pl-php/all/all
@felixgomezlopez
@felixgomezlopez
PHP 7
@felixgomezlopez
¿SOBRE QUÉ SE BASA?
https://drive.google.
com/file/d/0B3UKOMH_4lgBUTdjUGxIZ3l1Ukk/view?usp=sharing
● Refactoring
● Objetivo principal: Alcanzar un nuevo nivel de rendimiento y
hacerlo base para futuras releases
● Separado de la rama principal de PHP en Enero de 2014
● Sin cambios para el usuario (solo cambios internos)
@felixgomezlopez
ESTADO DE PHPNG
● Llevó 2 semanas compilar el core
● En dos semanas más podía correr bench.php
● Después de mes y medio compatible con WordPress
● Se abre el proyecto 1 mes después (principios de mayo)
● Se mergea a master como base para PHP7 en Agosto de 2014
@felixgomezlopez
ESTADO DE PHPNG EN OCTUBE 2014
@felixgomezlopez
ESTADO DE PHPNG EN OCTUBE 2014
@felixgomezlopez
@felixgomezlopez
@felixgomezlopez
http://es.slideshare.net/nikita_ppv/php-7-what-changed-internally-php-barcelona-2015
@felixgomezlopez
USERLAND
PHP 7 CHANGES
INTERNALS
@felixgomezlopez
@felixgomezlopez
PHP 7: INTERNALS
@felixgomezlopez
INTERNALS
CÓDIGO PHP SCANNING
(a.k.a. LEXING)
<?php
echo "Hello World";
$a = 1 + 1;
echo $a;
<?php
$code = <<<'PHPCODE'
<?php
echo "Hello World";
$a = 1 + 1;
echo $a;
PHPCODE;
print_r(token_get_all($code));
TOKENS
@felixgomezlopez
Array
(
[0] => Array
(
[0] => 376
[1] => <?php
[2] => 1
)
[1] => Array
(
[0] => 312
[1] => $a
[2] => 2
)
[2] => Array
(
[0] => 379
[1] =>
[2] => 2
)
[3] => =
[4] => Array
(
[0] => 379
[1] =>
[2] => 2
)
[5] => Array
(
[0] => 318
[1] => "Hello World"
[2] => 2
)
[6] => ;
[7] => Array
(
[0] => 379
[1] =>
[2] => 2
)
[8] => Array
(
[0] => 319
[1] => echo
[2] => 3
)
[9] => Array
(
[0] => 379
[1] =>
[2] => 3
)
[10] => Array
(
[0] => 312
[1] => $a
[2] => 3
)
[11] => ;
)
SCANNING (a.k.a LEXING)
@felixgomezlopez
<?php
$code = <<<'CODE'
<?php
$a = "Hello World";
echo $a;
CODE;
$tokens = token_get_all($code);
array_walk($tokens, function (&$token) {
if (count($token) > 1) {
$token[0] = token_name((int) $token[0]);
}
});
print_r($tokens);
SCANNING (a.k.a LEXING)
@felixgomezlopez
Array
(
[0] => Array
(
[0] => T_OPEN_TAG
[1] => <?php
[2] => 1
)
[1] => Array
(
[0] => T_VARIABLE
[1] => $a
[2] => 2
)
[2] => Array
(
[0] => T_WHITESPACE
[1] =>
[2] => 2
)
[3] => =
[4] => Array
(
[0] => T_WHITESPACE
[1] =>
[2] => 2
)
[5] => Array
(
[0] => T_CONSTANT_ENCAPSED_STRING
[1] => "Hello World"
[2] => 2
)
[6] => ;
[7] => Array
(
[0] => T_WHITESPACE
[1] =>
[2] => 2
)
http://php.net/manual/en/tokens.php
@felixgomezlopez
CÓDIGO PHP SCANNING
(a.k.a. LEXING)
PARSING
Tokens
● Elimina espacios en blanco
● Se queda con expresiones irreducibles del
conjunto de tokens
PARSING (PHP 5)
<?php
echo "Hello World";
$a = 1 + 1;
echo $a;
1. mostrar string
2. sumar dos números
3. guardar el resultado de la operación anterior en una
variable
4. mostrar la variable
@felixgomezlopez
COMPILING (PHP 5)
CÓDIGO PHP SCANNING
(a.k.a. LEXING)
Tokens
OPCODES
● ZEND_ECHO 'Hello World'
● ZEND_ADD ~0 1 1
● ZEND_ASSIGN !0 ~0
● ZEND_ECHO !0
<?php
echo "Hello World";
$a = 1 + 1;
echo $a;
PARSING
matching and opcode generation
@felixgomezlopez
Finding entry points
Branch analysis from position: 0
Jump found. Position 1 = -2
filename: /in/KVrR3
function name: (null)
number of ops: 4
compiled vars: !0 = $a
line #* E I O op fetch ext return operands
-------------------------------------------------------------------------------------
3 0 E > ECHO 'Hello+World'
4 1 ASSIGN !0, 2
5 2 ECHO !0
3 > RETURN 1
Generated using Vulcan Logic Dumper, using php 7.0.0
OPCODE REPRESENTATION EXAMPLE (PHP 7)
<?php
echo "Hello World";
$a = 1 + 1;
echo $a;
https://github.com/php/php-src/blob/master/Zend/zend_vm_def.h
@felixgomezlopez
CÓDIGO PHP SCANNING
(a.k.a. LEXING)
OPCODESPARSING AST
Tokens
Tokens
PHP 7: ABSTRACT SYNTAX TREE (AST)
https://es.wikipedia.org/wiki/%C3%81rbol_de_sintaxis_abstracta
@felixgomezlopez
PHP 7: VENTAJAS ABSTRACT SYNTAX TREE (AST)
● Permite añadir funcionalidades más fácilmente
● Consistencia en la interpretación
● Mejora en rendimiento
● Permite que el lenguaje sea más flexible
Posibilidades “SCI-FI”
● Posibilidad de conversión inversa por análisis de AST->SOURCE CODE
● Posibilidad de generar AST externo para ser compilado por Zend
Engine 3
@felixgomezlopez
[$x*2 foreach(range(0,10) as $x)]
http://twig.sensiolabs.org/doc/internals.html
[x*2 for x in range(10)]
PHP 7: POSIBILITIES ABSTRACT SYNTAX TREE (AST)
http://docs.hylang.org/en/latest/
@felixgomezlopez
PHP 7: USERLAND
NEWS
@felixgomezlopez
ENGINE EXCEPTIONS
https://wiki.php.net/rfc/throwable-interface
https://wiki.php.net/rfc/engine_exceptions_for_php7
@felixgomezlopez
NEW EXCEPTION TREE
Exception
LogicException
RangeException
Throwable
Error
ParseError
TypeError
@felixgomezlopez
EXCEPTIONS (NEW ERROR INTERCEPTION)
<?php
function add(int $left, int $right) {
return $left + $right;
}
try {
echo add('left', 'right');
} catch (Exception $e) {
echo "Captured exception";
} catch (Error $e) { // TypeError
echo $e->getMessage();
}
@felixgomezlopez
EXCEPTIONS
<?php
$a=6;
$a->grow();
PHP5
PHP7
PHP Fatal error: Call to a member function grow() on
integer
Fatal error: Uncaught Error: Call to a member function
grow() on integer
@felixgomezlopez
<?php
try {
$a = 6;
$a->grow();
} catch (Error $e) {
echo $e->getMessage();
}
EXCEPTIONS
Call to a member function grow() on integer
@felixgomezlopez
EXCEPTIONS
<?php
try {
foo();
} catch (Error $e) {
var_dump($e);
}
object(Error)#1 (7) {
["message":protected]=>
string(43) "Call to a member function grow() on
integer"
["string":"Error":private]=>
string(0) ""
["code":protected]=>
int(0)
["file":protected]=>
string(27) "/home/vagrant/Lab/index.php"
["line":protected]=>
int(5)
["trace":"Error":private]=>
array(0) {
}
["previous":"Error":private]=>
NULL
}
@felixgomezlopez
RETURN TYPE DECLARATIONS
https://wiki.php.net/rfc/return_types
@felixgomezlopez
RETURN TYPE DECLARATIONS (TIPOS DE RETORNO)
function foo(): array {
return [];
}
@felixgomezlopez
RETURN TYPE DECLARATIONS (TIPOS DE RETORNO)
<?php
// Returned type does not match the type declaration
function get_config(): array {
return 42;
}
get_config();
Fatal error: Uncaught TypeError: Return value of get_config() must be of the
type array, integer returned in /home/vagrant/Lab/index.php:6
Stack trace:
#0 /home/vagrant/Lab/index.php(9): get_config()
#1 {main}
thrown in /home/vagrant/Lab/index.php on line 6
@felixgomezlopez
SCALAR TYPE DECLARATIONS
https://wiki.php.net/rfc/scalar_type_hints_v5
@felixgomezlopez
SCALAR TYPE DECLARATIONS
<?php
declare(strict_types=1);
function add(float $a, float $b): float {
return $a + $b;
}
add(1, 2); // float(3)
int a float es la única conversión permitida
@felixgomezlopez
SCALAR TYPE DECLARATIONS
<?php
function add(int $val1, int $val2) {
return $val1 + $val2;
}
$a = add("2", "2");
var_dump($a); // int(4)
@felixgomezlopez
SCALAR TYPE DECLARATIONS
<?php
declare(strict_types = 1);
function add(int $val1, int $val2) {
return $val1 + $val2;
}
$a = add("2", "2");
var_dump($a);
@felixgomezlopez
Fatal error: Uncaught TypeError: Argument 1 passed to add()
must be of the type integer, string given, called in
/home/vagrant/Lab/index.php on line 10 and defined in
/home/vagrant/Lab/index.php:5
Stack trace:
#0 /home/vagrant/Lab/index.php(10): add('2', '2')
#1 {main}
thrown in /home/vagrant/Lab/index.php on line 5
SCALAR TYPE DECLARATIONS
@felixgomezlopez
<?php
declare(strict_types = 1);
function foo() : bool {
return 1;
}
$a = foo();
var_dump($a);
SCALAR TYPE DECLARATIONS
@felixgomezlopez
SCALAR TYPE DECLARATIONS
Fatal error: Uncaught TypeError: Return value of foo() must
be of the type boolean, integer returned in
/home/vagrant/Lab/index.php:5
Stack trace:
#0 /home/vagrant/Lab/index.php(8): foo()
#1 {main}
thrown in /home/vagrant/Lab/index.php on line 5
@felixgomezlopez
NULL COALESCE OPERATOR
(OPERADOR DE FUSIÓN DE NULL)
https://wiki.php.net/rfc/isset_ternary
@felixgomezlopez
NULL COALESCE OPERATOR - ANTERIOR ALTERNATIVA
if (isset($_GET['user'])) {
$user = $_GET['user'];
} else {
$user = 'nobody';
}
$user = isset($_GET['user']) ? $_GET['user'] : 'nobody';
@felixgomezlopez
NULL COALESCE OPERATOR (FUSIÓN DE NULL)
$x = ['foo' => 'a', 'bar' => 'b'];
var_dump($x['baz'] ?? $x['bar'] ?? $x['foo'] ?? 'none');
// string(1) "b"
$user = $_GET['user'] ?? 'nobody';
$user = isset($_GET['user']) ? $_GET['user'] : 'nobody';
@felixgomezlopez
SPACESHIP (a.k.a. COMBINED COMPARISON)
OPERATOR
https://wiki.php.net/rfc/combined-comparison-operator
@felixgomezlopez
SPACESHIP OPERATOR
// Integers
echo 1 <=> 1; // 0
echo 1 <=> 2; // -1
echo 2 <=> 1; // 1
// Floats
echo 1.5 <=> 1.5; // 0
echo 1.5 <=> 2.5; // -1
echo 2.5 <=> 1.5; // 1
// Strings
echo "a" <=> "a"; // 0
echo "a" <=> "b"; // -1
echo "b" <=> "a"; // 1
echo "a" <=> "aa"; // -1
echo "zz" <=> "aa"; // 1
// Arrays
echo [] <=> []; // 0
echo [1, 2, 3] <=> [1, 2, 3]; // 0
echo [1, 2, 3] <=> []; // 1
echo [1, 2, 3] <=> [1, 2, 1]; // 1
echo [1, 2, 3] <=> [1, 2, 4]; // -1
// Objects
// Only values are compared
$a = (object) ["a" => "b"];
$b = (object) ["b" => "b"];
echo $a <=> $b; // 0
@felixgomezlopez
ANONYMOUS CLASSES
https://wiki.php.net/rfc/anonymous_classes
@felixgomezlopez
ANONYMOUS CLASSES
<?php
var_dump(new class($i) {
public function __construct($i) {
$this->i = $i;
}
});
<?php
class Foo {}
$child = new class extends Foo {};
var_dump($child instanceof Foo); // true
@felixgomezlopez
ANONYMOUS CLASSES
<?php
trait Foo {
public function someMethod() {
return "bar";
}
}
$anonClass = new class {
use Foo;
};
var_dump($anonClass->someMethod()); // string(3) "bar"
@felixgomezlopez
ANONYMOUS CLASSES
<?php
// PHP 5.x
class MyLogger {
public function log($msg) {
print_r($msg . "n");
}
}
$pusher->setLogger( new MyLogger() );
// New Hotness
$pusher->setLogger(new class {
public function log($msg) {
print_r($msg . "n");
}
});
@felixgomezlopez
GROUP USE DECLARATIONS
https://wiki.php.net/rfc/group_use_declarations
@felixgomezlopez
GROUP USE DECLARATIONS
use SymfonyComponentFormForm;
use SymfonyComponentFormFormError;
use TalkTalkDb;
use TalkTalkApi;
use UserUserDb;
use UserUserApi;
use SymfonyComponentForm{Form, FormError};
use Talk{TalkDb, TalkApi};
use User{UserDb, UserApi};
PHP5
PHP7
@felixgomezlopez
UNIFORM VARIABLE SYNTAX
https://wiki.php.
net/rfc/uniform_variable_syntax
@felixgomezlopez
UNIFORM VARIABLE SYNTAX
echo $car->$engine['model'];
// PHP 5
echo $car->{$engine['model']};
// PHP 7
echo {$car->$engine}['model'];
@felixgomezlopez
UNIFORM VARIABLE SYNTAX (CONT.)
// old meaning // new meaning
$$foo['bar']['baz'] ${$foo['bar']['baz']} ($$foo)['bar']['baz']
$foo->$bar['baz'] $foo->{$bar['baz']} ($foo->$bar)['baz']
$foo->$bar['baz']() $foo->{$bar['baz']}() ($foo->$bar)['baz']()
Foo::$bar['baz']() Foo::{$bar['baz']}() (Foo::$bar)['baz']()
Ante la duda paréntesis!
@felixgomezlopez
$foo()['bar']()
[$obj1, $obj2][0]->prop
getStr(){0}
// support nested ::
$foo['bar']::$baz
$foo::$bar::$baz
$foo->bar()::baz()
// support nested ()
foo()()
$foo->bar()()
Foo::bar()()
$foo()()
UNIFORM VARIABLE SYNTAX (CONT.)
@felixgomezlopez
UNIFORM VARIABLE SYNTAX (CONT.)
// support operations on arbitrary (...) expressions
(...)['foo']
(...)->foo
(...)->foo()
(...)::$foo
(...)::foo()
(...)()
// two more practical examples for the last point
(function() { ... })()
($obj->closure)()
@felixgomezlopez
GENERATOR DELEGATION & RETURN VALUES
https://wiki.php.net/rfc/generator-delegation
@felixgomezlopez
GENERATOR RETURN VALUES
<?php
function foo() {
yield 1;
yield 2;
return 42;
}
$bar = foo();
foreach ($bar as $element) {
echo $element, "n";
}
var_dump($bar->getReturn());
// 1
// 2
// int(42)
@felixgomezlopez
GENERATOR DELEGATION
<?php
function myGeneratorFunction($foo) {
$bar = yield from factoredComputation1($foo);
$baz = yield from factoredComputation2($bar);
return $baz;
}
function factoredComputation1($foo) {
yield $foo + 1;
yield $foo + 2;
}
function factoredComputation2($bar) {
yield $bar + 3;
yield $bar + 4;
}
foreach (myGeneratorFunction(0) as $v) {
echo $v;
}
// 1234
@felixgomezlopez
UNICODE SCAPE SYNTAX
https://wiki.php.net/rfc/unicode_escape
@felixgomezlopez
UNICODE SCAPE SYNTAX
echo "We u{2665} PHPVigon";
We ♥ PHPVigo
echo "u{1F602}"; // outputs
echo "u{202E}Reversed text";
// outputs txet desreveR
@felixgomezlopez
REMOVE ALTERNATIVE PHP TAGS
https://wiki.php.net/rfc/remove_alternative_php_tags
@felixgomezlopez
REMOVE ALTERNATIVE PHP TAGS
● <% opening tag
● <%= opening tag with echo
● %> closing tag
● (<scripts+languages*=s*(php|"php"|'php')s*>)i
opening tag
● (</script>)i closing tag
@felixgomezlopez
REMOVE ALTERNATIVE PHP TAGS
<script type="php">
// No funciona
</script>
<%
// Tampoco funciona
%>
@felixgomezlopez
REMOVE DEAD SAPIS AND EXTENSIONS
https://wiki.php.net/rfc/removal_of_dead_sapis_and_exts
@felixgomezlopez
REMOVE DEAD SAPIS AND EXTENSIONS
Se eliminan las APIS de servidor no portadas o discontinuadas
● sapi/aolserver
● sapi/apache
● sapi/apache_hooks
● sapi/apache2filter
● sapi/caudium
● sapi/continuity
● sapi/isapi
● sapi/milter
● sapi/nsapi
● sapi/phttpd
● sapi/pi3web
● sapi/roxen
● sapi/thttpd
● sapi/tux
● sapi/webjames
● ext/mssql
● ext/mysql
● ext/sybase_ct
● ext/ereg
Muchas de ellas se migran a PECL
@felixgomezlopez
REMOVE DEPRECATED FUNCIONALITY
https://wiki.php.net/rfc/remove_deprecated_functionality_in_php7
@felixgomezlopez
REMOVE DEPRECATED FUNCIONALITY
Las más notables son:
● Extensión mysql (ext/mysql) -> PDO, mysqli
● Extensión ereg (ext/ereg) -> PCRE
● Asignación de new por referencia $a = & new A;
@felixgomezlopez
“REMOVAL” OF PHP4 CONSTRUCTORS
https://wiki.php.net/rfc/remove_deprecated_functionality_in_php7
@felixgomezlopez
<?php
class Filter
{
// PHP 5: filter is a constructor
// PHP 7: filter is a constructor and E_DEPRECATED is raised
// PHP 8: filter is a normal method and is not a constructor;
no E_DEPRECATED is raised
function filter($a) {}
}
$filter = new ReflectionMethod('Filter', 'filter');
// PHP 5: bool(true)
// PHP 7: bool(true)
// PHP 8: bool(false)
var_dump($filter->isConstructor());
“REMOVAL” OF PHP4 CONSTRUCTORS
@felixgomezlopez
<?php
// function filter is not used as constructor in PHP 5+
class Filter
{
// PHP 5: E_STRICT "Redefining already defined
constructor"
// PHP 7: No error is raised
// PHP 8: No error is raised
function __construct() {}
function filter($a) {}
}
“REMOVAL” OF PHP4 CONSTRUCTORS
@felixgomezlopez
<?php
// function filter is not used as constructor in PHP 5+
class Filter {
function __construct() {}
// PHP 5.0.0 - 5.2.13, 5.3.0 - 5.3.2: E_STRICT "Redefining
already defined constructor"
// PHP 5.2.14 - 5.2.17, 5.3.3 - 5.6: No error is raised
// PHP 7: No error is raised
// PHP 8: No error is raised
function filter($a) {}
}
REMOVAL OF PHP4 CONSTRUCTORS
@felixgomezlopez
class Filter
{
// PHP 5: filter is a constructor
// PHP 7: filter is a constructor and E_DEPRECATED is raised
// PHP 8: filter is a normal method and is not a constructor; no E_DEPRECATED
is raised
function filter() {}
}
class FilterX extends Filter
{
function __construct(){
// PHP 5: Filter::filter is called; no error
// PHP 7: Filter::filter is called; no error
// PHP 8: "Fatal error: Cannot call constructor"
parent::__construct();
}
}
new FilterX();
“REMOVAL” OF PHP4 CONSTRUCTORS
@felixgomezlopez
BUGFIX: MULTIPLE DEFAULT CLAUSES IN SWITCH RAISE ERROR
https://wiki.php.net/rfc/switch.default.
multiple
@felixgomezlopez
MULTIPLE DEFAULT CLAUSES IN SWITCH RAISE ERROR
switch ($expr) {
default:
neverExecuted();
break;
default:
executed();
}
@felixgomezlopez
BUGFIX: FOREACH BEHAVIOUR
https://wiki.php.net/rfc/php7_foreach
@felixgomezlopez
BUGFIX FOREACH BEHAVIOUR
<?php
$a = [1,2,3];
foreach($a as $v) {
echo $v . " - " . current($a) . "n";
}
// PHP5
// 1 - 2
// 2 - 2
// 3 - 2
// PHP7
// 1 - 1
// 2 - 1
// 3 - 1
@felixgomezlopez
PHP 7: TESTS
@felixgomezlopez
https://hub.docker.com/_/php/
https://github.com/rlerdorf/php7dev
https://3v4l.org/
https://github.com/sstalle/php7cc
TESTS
@felixgomezlopez
QUESTIONS?
THANKS!
@felixgomezlopez
www.opsou.com www.pedrofigueras.com

More Related Content

What's hot

Zepplin_Pronko_Magento_Festival Hall 1_Final
Zepplin_Pronko_Magento_Festival Hall 1_FinalZepplin_Pronko_Magento_Festival Hall 1_Final
Zepplin_Pronko_Magento_Festival Hall 1_Final
Max Pronko
 

What's hot (20)

Django, What is it, Why is it cool?
Django, What is it, Why is it cool?Django, What is it, Why is it cool?
Django, What is it, Why is it cool?
 
Developing a Joomla 3.x Component using RAD FOF- Part 2: Front-end + demo - J...
Developing a Joomla 3.x Component using RAD FOF- Part 2: Front-end + demo - J...Developing a Joomla 3.x Component using RAD FOF- Part 2: Front-end + demo - J...
Developing a Joomla 3.x Component using RAD FOF- Part 2: Front-end + demo - J...
 
Developing a Joomla 3.x Component using RAD/FOF - Joomladay UK 2014
Developing a Joomla 3.x Component using RAD/FOF - Joomladay UK 2014Developing a Joomla 3.x Component using RAD/FOF - Joomladay UK 2014
Developing a Joomla 3.x Component using RAD/FOF - Joomladay UK 2014
 
Zepplin_Pronko_Magento_Festival Hall 1_Final
Zepplin_Pronko_Magento_Festival Hall 1_FinalZepplin_Pronko_Magento_Festival Hall 1_Final
Zepplin_Pronko_Magento_Festival Hall 1_Final
 
SPARQLing Services
SPARQLing ServicesSPARQLing Services
SPARQLing Services
 
Behaviour Driven Development con Behat & Drupal
Behaviour Driven Development con Behat & DrupalBehaviour Driven Development con Behat & Drupal
Behaviour Driven Development con Behat & Drupal
 
Lone StarPHP 2013 - Building Web Apps from a New Angle
Lone StarPHP 2013 - Building Web Apps from a New AngleLone StarPHP 2013 - Building Web Apps from a New Angle
Lone StarPHP 2013 - Building Web Apps from a New Angle
 
Cenário atual do PHP e Introdução ao Laravel no Devinvale 2014
Cenário atual do PHP e Introdução ao Laravel no Devinvale 2014Cenário atual do PHP e Introdução ao Laravel no Devinvale 2014
Cenário atual do PHP e Introdução ao Laravel no Devinvale 2014
 
Introduction to CakePHP
Introduction to CakePHPIntroduction to CakePHP
Introduction to CakePHP
 
Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...
Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...
Desenvolvendo uma aplicação híbrida para Android e IOs utilizando Ionic, aces...
 
PyCon Korea 2019 REST API Document Generation
PyCon Korea 2019 REST API Document GenerationPyCon Korea 2019 REST API Document Generation
PyCon Korea 2019 REST API Document Generation
 
What The Flask? and how to use it with some Google APIs
What The Flask? and how to use it with some Google APIsWhat The Flask? and how to use it with some Google APIs
What The Flask? and how to use it with some Google APIs
 
Django by rj
Django by rjDjango by rj
Django by rj
 
Joomla 3 Component programmeren met RAD - Joomladagen 2014
Joomla 3 Component programmeren met RAD - Joomladagen 2014Joomla 3 Component programmeren met RAD - Joomladagen 2014
Joomla 3 Component programmeren met RAD - Joomladagen 2014
 
Python/Flask Presentation
Python/Flask PresentationPython/Flask Presentation
Python/Flask Presentation
 
Capistrano deploy Magento project in an efficient way
Capistrano deploy Magento project in an efficient wayCapistrano deploy Magento project in an efficient way
Capistrano deploy Magento project in an efficient way
 
Web-Performance
Web-PerformanceWeb-Performance
Web-Performance
 
Improving QA on PHP projects - confoo 2011
Improving QA on PHP projects - confoo 2011Improving QA on PHP projects - confoo 2011
Improving QA on PHP projects - confoo 2011
 
Xmla4js
Xmla4jsXmla4js
Xmla4js
 
Dependency management in Magento with Composer
Dependency management in Magento with ComposerDependency management in Magento with Composer
Dependency management in Magento with Composer
 

Viewers also liked

Multiculturalidad en el aula
Multiculturalidad en el aulaMulticulturalidad en el aula
Multiculturalidad en el aula
jimenez_88
 

Viewers also liked (11)

Gestión Básica De La Información
Gestión Básica De La InformaciónGestión Básica De La Información
Gestión Básica De La Información
 
A investigar
A investigarA investigar
A investigar
 
Furniture Products under £99: Do You Really Need It? This Will Help You to De...
Furniture Products under £99: Do You Really Need It? This Will Help You to De...Furniture Products under £99: Do You Really Need It? This Will Help You to De...
Furniture Products under £99: Do You Really Need It? This Will Help You to De...
 
TE Connectivity Tyco Screened Separable Connectors (Raychem RSTI)
TE Connectivity Tyco Screened Separable Connectors (Raychem RSTI)TE Connectivity Tyco Screened Separable Connectors (Raychem RSTI)
TE Connectivity Tyco Screened Separable Connectors (Raychem RSTI)
 
ENFERMEDADES CAUSADAS POR FALTA DE ASEO PERSONAL
ENFERMEDADES CAUSADAS POR FALTA DE ASEO PERSONALENFERMEDADES CAUSADAS POR FALTA DE ASEO PERSONAL
ENFERMEDADES CAUSADAS POR FALTA DE ASEO PERSONAL
 
Pascal2
Pascal2Pascal2
Pascal2
 
Recursos de la biblioteca Antoine de Saint-Exupéry
Recursos de la biblioteca Antoine de Saint-ExupéryRecursos de la biblioteca Antoine de Saint-Exupéry
Recursos de la biblioteca Antoine de Saint-Exupéry
 
Multiculturalidad en el aula
Multiculturalidad en el aulaMulticulturalidad en el aula
Multiculturalidad en el aula
 
Reference Letter
Reference LetterReference Letter
Reference Letter
 
The IoT Suitcase - Pitch Deck
The IoT Suitcase - Pitch DeckThe IoT Suitcase - Pitch Deck
The IoT Suitcase - Pitch Deck
 
My presentación
My presentaciónMy presentación
My presentación
 

Similar to Php 7 evolution

Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )
Joseph Scott
 

Similar to Php 7 evolution (20)

The why and how of moving to php 5.4
The why and how of moving to php 5.4The why and how of moving to php 5.4
The why and how of moving to php 5.4
 
The why and how of moving to PHP 5.4/5.5
The why and how of moving to PHP 5.4/5.5The why and how of moving to PHP 5.4/5.5
The why and how of moving to PHP 5.4/5.5
 
The why and how of moving to php 5.4/5.5
The why and how of moving to php 5.4/5.5The why and how of moving to php 5.4/5.5
The why and how of moving to php 5.4/5.5
 
An introduction to PHP 5.4
An introduction to PHP 5.4An introduction to PHP 5.4
An introduction to PHP 5.4
 
PHP in 2018 - Q4 - AFUP Limoges
PHP in 2018 - Q4 - AFUP LimogesPHP in 2018 - Q4 - AFUP Limoges
PHP in 2018 - Q4 - AFUP Limoges
 
The why and how of moving to PHP 5.5/5.6
The why and how of moving to PHP 5.5/5.6The why and how of moving to PHP 5.5/5.6
The why and how of moving to PHP 5.5/5.6
 
Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )Anatomy of a PHP Request ( UTOSC 2010 )
Anatomy of a PHP Request ( UTOSC 2010 )
 
50 shades of PHP
50 shades of PHP50 shades of PHP
50 shades of PHP
 
Living With Legacy Code
Living With Legacy CodeLiving With Legacy Code
Living With Legacy Code
 
LISA QooxdooTutorial Slides
LISA QooxdooTutorial SlidesLISA QooxdooTutorial Slides
LISA QooxdooTutorial Slides
 
Debugging: Rules And Tools - PHPTek 11 Version
Debugging: Rules And Tools - PHPTek 11 VersionDebugging: Rules And Tools - PHPTek 11 Version
Debugging: Rules And Tools - PHPTek 11 Version
 
関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい関西PHP勉強会 php5.4つまみぐい
関西PHP勉強会 php5.4つまみぐい
 
Giới thiệu PHP 7
Giới thiệu PHP 7Giới thiệu PHP 7
Giới thiệu PHP 7
 
第1回PHP拡張勉強会
第1回PHP拡張勉強会第1回PHP拡張勉強会
第1回PHP拡張勉強会
 
Listen afup 2010
Listen afup 2010Listen afup 2010
Listen afup 2010
 
What's new with PHP7
What's new with PHP7What's new with PHP7
What's new with PHP7
 
What To Expect From PHP7
What To Expect From PHP7What To Expect From PHP7
What To Expect From PHP7
 
Debugging: Rules & Tools
Debugging: Rules & ToolsDebugging: Rules & Tools
Debugging: Rules & Tools
 
CodePolitan Webinar: The Rise of PHP
CodePolitan Webinar: The Rise of PHPCodePolitan Webinar: The Rise of PHP
CodePolitan Webinar: The Rise of PHP
 
DevOps in PHP environment
DevOps in PHP environmentDevOps in PHP environment
DevOps in PHP environment
 

Recently uploaded

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc
 

Recently uploaded (20)

Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
WSO2 Micro Integrator for Enterprise Integration in a Decentralized, Microser...
WSO2 Micro Integrator for Enterprise Integration in a Decentralized, Microser...WSO2 Micro Integrator for Enterprise Integration in a Decentralized, Microser...
WSO2 Micro Integrator for Enterprise Integration in a Decentralized, Microser...
 
JohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptxJohnPollard-hybrid-app-RailsConf2024.pptx
JohnPollard-hybrid-app-RailsConf2024.pptx
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
How to Check CNIC Information Online with Pakdata cf
How to Check CNIC Information Online with Pakdata cfHow to Check CNIC Information Online with Pakdata cf
How to Check CNIC Information Online with Pakdata cf
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Choreo: Empowering the Future of Enterprise Software Engineering
Choreo: Empowering the Future of Enterprise Software EngineeringChoreo: Empowering the Future of Enterprise Software Engineering
Choreo: Empowering the Future of Enterprise Software Engineering
 
AI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by AnitarajAI in Action: Real World Use Cases by Anitaraj
AI in Action: Real World Use Cases by Anitaraj
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Stronger Together: Developing an Organizational Strategy for Accessible Desig...
Stronger Together: Developing an Organizational Strategy for Accessible Desig...Stronger Together: Developing an Organizational Strategy for Accessible Desig...
Stronger Together: Developing an Organizational Strategy for Accessible Desig...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
ChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps ProductivityChatGPT and Beyond - Elevating DevOps Productivity
ChatGPT and Beyond - Elevating DevOps Productivity
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
TrustArc Webinar - Unified Trust Center for Privacy, Security, Compliance, an...
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 

Php 7 evolution

Editor's Notes

  1. Félix Gómez López - Freelance Web developer Físico de formación. Ex-profesor de FP Desarrollador web desde hace más de 10 años. Actualmente desarrollando proyectos a medida basados en Symfony2/3 AngularJS NodeJS MongoDB Ionic