Upgrade to Pro — share decks privately, control downloads, hide ads and more …

🇧🇷 PHP antes e depois: os últimos 10 anos da linguagem mais usada na Web

🇧🇷 PHP antes e depois: os últimos 10 anos da linguagem mais usada na Web

Palestra apresentada no 9º DevStarter, na Vulpi, em Belo Horizonte, MG.

Junior Grossi

June 26, 2019
Tweet

More Decks by Junior Grossi

Other Decks in Programming

Transcript

  1. PHP EM 2019 Linguagem mais usada na Web (~80%) Só

    o WordPress é responsável por ~34% Muito problema pra resolver (mais empregos)
  2. BOOM DE FW: ~2005-2007 O PHP já aprendeu e ainda

    aprende com os erros Muita coisa já veio e já foi Qualquer semelhança com JS é mera coincidência
  3. PHP 5.3 (2009) O DIVISOR DE ÁGUAS NAMESPACES + LAMBDA

    FUNCTIONS/CLOSURES (Mudanças no processo interno de releases do PHP)
  4. NAMESPACES Classes não podiam ter o mesmo nome HtmlPrinter, Zend_HtmlPrinter

    class Zend_HtmlPrinter { public function print(); }
  5. namespace DevStarter\Talks; use Foo\Exporter\Exporter; use Zend\Html\Exporter as ZendExporter; class PhpTalk

    { public function export() { $fooExporter = new Exporter(); $zendExporter = new ZendExporter(); // ... } } https://wiki.php.net/rfc/namespacecurlies
  6. LAMBDA FUNCTIONS/CLOSURES Antes do PHP 5.3 A partir do PHP

    5.3 $array = array_map('append_x', $array); function append_x($item) { return $item . 'x'; } $array = array_map(function ($item) { return $item . 'x'; }, $array);
  7. Nova geração de frameworks (surgimento dos primeiros micro-frameworks) (execução tardia)

    $router­>get('/users/{id}', function ($id) { return User::find($id); }); $function = function ($word) { echo $word . ' World!'; } $function('Hello'); // "Hello World!"
  8. PHP 5.4 Traits Shortened array syntax Melhoria de performance +

    menos consumo de memória Built-in Web Server
  9. TRAITS trait Flyable { public function fly() { // Go,

    fly! } } trait Walkable { public function walk() { // Go, walk! } } class Bird { use Flyable, Walkable; } class Chicken { use Walkable; } $bird = new Bird(); $chicken = new Chicken(); $bird­>walk(); $bird­>fly(); $chicken­>walk();
  10. SHORTENED ARRAY SYNTAX Antes do PHP 5.4 Depois do PHP

    5.4 $numbers = array(1, 2, 3); $associative = array('name' => 'Junior', 'age' => 34); $numbers = [1, 2, 3]; $associative = ['name' => 'Junior', 'age' => 34];
  11. BUILT-IN WEB SERVER Não é necessário mais um Web server

    pra desenvolvimento > php ­S localhost:8000
  12. COMPOSER Resolveu o problema dos require > composer require cakephp/database

    require 'database.php'; require 'pdf.php'; require 'mail.php'; require 'mail­2.php'; require 'mail­98.php'; require 'mail­xp.php'; require 'mail­millenium.php'; $database = db_query('SELECT * FROM users');
  13. /composer.json { "name": "jgrossi/corcel", "description": "Use WordPress backend with Laravel

    or any PHP framework", "homepage": "http://github.com/corcel/corcel", "authors": [ { "name": "Junior Grossi", "email": "[email protected]" } ], "require": { "php": ">=7.1.3", "illuminate/database": "5.7.*", "hautelook/phpass": "0.3.*", "thunderer/shortcode": "^0.6.2" }, "require­dev": { "phpunit/phpunit": "^7.0", "mockery/mockery": "^1.0" }, "autoload": { "psr­4": { "Corcel\\": "src/", "Corcel\\Tests\\": "tests/" } } }
  14. PSR-7 PSR-11 namespace MyFramework\Http; use Psr\Http\Message\RequestInterface; class Request implements RequestInterface

    { } namespace MyFramework\Container; use Psr\Container\ContainerInterface; class Container implements ContainerInterface { }
  15. PHP 5.5 E 5.6 ANTES DA GRANDE MUDANÇA (2013 e

    2014) Adiciona scalar class name resolution via ::class Adiciona finally para exceptions Melhoria de performance (Zend OPcache) Outras mudanças...
  16. PHP 7 (2015) Nova Zend Engine (v3) 2x mais rápido

    que PHP 5 50% menos de consumo de memória
  17. PHP 7.0 UNIFORM VARIABLE SYNTAX // Before $foo = new

    Foo(); $baz = $foo­>bar(); // After $baz = (new Foo())­>bar(); // Before $foo = $foo­>bar(); echo $foo[0]; // After echo $foo­>bar()[0];
  18. PHP 7.0 NULL COALESCE OPERATOR: ?? // Before $age =

    isset($data['age']) ? $data['age'] : 100; // After $age = $data['age'] ?? 100;
  19. PHP 7.0 ⭐ RETURN TYPE DECLARATIONS ⭐ ⭐ SCALAR TYPE

    DECLARATIONS ⭐ (opcional) // Before public function create($sum, $title) { // your code here } // After public function create(float $sum, string $title): float { // your code here }
  20. STRICT TYPES = 1 declare(strict_types=1); namespace Foo\Printer; class CsvPrinter implements

    PrinterInterface { public function __construct(string $foo, float $bar) { // ... } }
  21. PHP 7.0 GROUP USE DECLARATIONS // Before use Package\Http\Request; use

    Package\Http\Response; use Package\Http\Middleware; use Package\Http\BaseController as Controller; // After use Package\Http\{ Request, Response, BaseController as Controller };
  22. PHP 7.1, 7.2 E 7.3 void return type class constant

    visibility modifiers nullable types the object parameter and return type Libsodium extension abstract method overriding
  23. class User { private const TYPE_ADMIN = 'admin'; protected const

    TYPE_MEMBER = 'member'; public const TYPE_GUEST = 'guest'; } public function save(object $object, ?int $age): void { // do something and return nothing }
  24. NOVIDADES: PHP 7.4 NOV/2019 Preloading* Short closures Typed properties Improved

    type variance The null coalescing assignment operator muito mais!
  25. PHP 7.4 SHORT CLOSURES array_map(function (User $user) use ($prefix) {

    return $prefix . $user­>id; }, $users) array_map(fn(User $user) => $prefix . $user­>id, $users)
  26. PHP 7.4 TYPED PROPERTIES ANTES class Foo { /** @var

    int $bar */ private $bar; /** @var callable $bar */ private $function; /** @var string|null $bar */ protected $baz; /** @var array $bar */ public $list; }
  27. PHP 7.4 TYPED PROPERTIES DEPOIS class Foo { private int

    $bar = 4; private callable $function; protected ?string $baz = null; public array $list = [1, 2, 3]; }
  28. CONSIDERAÇÕES FINAIS PHP é uma das linguagens mais maduras Excelente

    performance (e vai melhorar!) Desenvolvimento muito rápido!