🇧🇷 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.

7bb3a66a199daec275d5ad339724c754?s=128

Junior Grossi

June 26, 2019
Tweet

Transcript

  1. PHP ANTES E DEPOIS Os últimos 10 anos da linguagem

    mais usada na Web!
  2. Sou Junior Grossi twitter.com/junior_grossi github.com/jgrossi

  3. Paciência!

  4. https://github.com/corcel/corcel

  5. None
  6. None
  7. https://glofox.com/careers

  8. ◽ 2004 php ◽ 2016 ◽

  9. PHP ARCHITECT Nov/2018 | Volume 17 | Issue 11

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

    o WordPress é responsável por ~34% Muito problema pra resolver (mais empregos)
  11. 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
  12. None
  13. PHP 5.3 (2009) O DIVISOR DE ÁGUAS NAMESPACES + LAMBDA

    FUNCTIONS/CLOSURES (Mudanças no processo interno de releases do PHP)
  14. REQUEST FOR COMMENTS (RFC) https://wiki.php.net/rfc

  15. NAMESPACES Classes não podiam ter o mesmo nome HtmlPrinter, Zend_HtmlPrinter

    class Zend_HtmlPrinter { public function print(); }
  16. 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
  17. 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);
  18. 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!"
  19. 2012 PHP 5.4 + COMPOSER ANO DAS MAIORES MUDANÇAS (Mudou

    de vez a comunidade PHP)
  20. PHP 5.4 Traits Shortened array syntax Melhoria de performance +

    menos consumo de memória Built-in Web Server
  21. 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();
  22. 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];
  23. BUILT-IN WEB SERVER Não é necessário mais um Web server

    pra desenvolvimento > php ­S localhost:8000
  24. COMPOSER Package Manager oficial do PHP http://getcomposer.org

  25. COMPOSER Resolveu o problema do Ctr C + Ctr V

    + controle de versões
  26. 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');
  27. /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": "juniorgro@gmail.com" } ], "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/" } } }
  28. PACKAGIST http://packagist.org

  29. AUTOLOADING + NAMESPACES use Corcel\Model\Post;

  30. PHP-FIG PSR (PHP STANDARD RECOMMENDATION) code style, autoload, interfaces padronizaram

    a toda
  31. https://www.php-fig.org

  32. 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 { }
  33. 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...
  34. PHP 7 TUDO NOVO, DE NOVO!

  35. PERAÍ, E O PHP 6?

  36. https://wiki.php.net/rfc/php6

  37. PHP 7 (2015) Nova Zend Engine (v3) 2x mais rápido

    que PHP 5 50% menos de consumo de memória
  38. None
  39. None
  40. 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];
  41. PHP 7.0 NULL COALESCE OPERATOR: ?? // Before $age =

    isset($data['age']) ? $data['age'] : 100; // After $age = $data['age'] ?? 100;
  42. 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 }
  43. STRICT TYPES = 1 declare(strict_types=1); namespace Foo\Printer; class CsvPrinter implements

    PrinterInterface { public function __construct(string $foo, float $bar) { // ... } }
  44. 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 };
  45. 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
  46. 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 }
  47. NOVIDADES: PHP 7.4 NOV/2019 Preloading* Short closures Typed properties Improved

    type variance The null coalescing assignment operator muito mais!
  48. 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)
  49. 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; }
  50. 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]; }
  51. PHP 8 ❤ JIT (just in time) compiler (vídeo do

    Zeev)
  52. VÍDEO

  53. CONSIDERAÇÕES FINAIS PHP é uma das linguagens mais maduras Excelente

    performance (e vai melhorar!) Desenvolvimento muito rápido!
  54. LARAVEL FRAMEWORK http://laravel.com

  55. PHP DO JEITO CERTO http://br.phptherightway.com/

  56. MERCADO EM BH

  57. VULPI https://www.vulpi.com.br/vagas-para-desenvolvedores/?skill=388

  58. PHP É FODA SIM!

  59. OBRIGADO! SLIDES DA PALESTRA DE HOJE ⭐ https://bit.ly/31XLQ7S http://twitter.com/junior_grossi