Slide 1

Slide 1 text

PHP ANTES E DEPOIS Os últimos 10 anos da linguagem mais usada na Web!

Slide 2

Slide 2 text

Sou Junior Grossi twitter.com/junior_grossi github.com/jgrossi

Slide 3

Slide 3 text

Paciência!

Slide 4

Slide 4 text

https://github.com/corcel/corcel

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

https://glofox.com/careers

Slide 8

Slide 8 text

◽ 2004 php ◽ 2016 ◽

Slide 9

Slide 9 text

PHP ARCHITECT Nov/2018 | Volume 17 | Issue 11

Slide 10

Slide 10 text

PHP EM 2019 Linguagem mais usada na Web (~80%) Só o WordPress é responsável por ~34% Muito problema pra resolver (mais empregos)

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

PHP 5.3 (2009) O DIVISOR DE ÁGUAS NAMESPACES + LAMBDA FUNCTIONS/CLOSURES (Mudanças no processo interno de releases do PHP)

Slide 14

Slide 14 text

REQUEST FOR COMMENTS (RFC) https://wiki.php.net/rfc

Slide 15

Slide 15 text

NAMESPACES Classes não podiam ter o mesmo nome HtmlPrinter, Zend_HtmlPrinter class Zend_HtmlPrinter { public function print(); }

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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);

Slide 18

Slide 18 text

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!"

Slide 19

Slide 19 text

2012 PHP 5.4 + COMPOSER ANO DAS MAIORES MUDANÇAS (Mudou de vez a comunidade PHP)

Slide 20

Slide 20 text

PHP 5.4 Traits Shortened array syntax Melhoria de performance + menos consumo de memória Built-in Web Server

Slide 21

Slide 21 text

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();

Slide 22

Slide 22 text

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];

Slide 23

Slide 23 text

BUILT-IN WEB SERVER Não é necessário mais um Web server pra desenvolvimento > php ­S localhost:8000

Slide 24

Slide 24 text

COMPOSER Package Manager oficial do PHP http://getcomposer.org

Slide 25

Slide 25 text

COMPOSER Resolveu o problema do Ctr C + Ctr V + controle de versões

Slide 26

Slide 26 text

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');

Slide 27

Slide 27 text

/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/" } } }

Slide 28

Slide 28 text

PACKAGIST http://packagist.org

Slide 29

Slide 29 text

AUTOLOADING + NAMESPACES use Corcel\Model\Post;

Slide 30

Slide 30 text

PHP-FIG PSR (PHP STANDARD RECOMMENDATION) code style, autoload, interfaces padronizaram a toda

Slide 31

Slide 31 text

https://www.php-fig.org

Slide 32

Slide 32 text

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 { }

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

PHP 7 TUDO NOVO, DE NOVO!

Slide 35

Slide 35 text

PERAÍ, E O PHP 6?

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

PHP 7 (2015) Nova Zend Engine (v3) 2x mais rápido que PHP 5 50% menos de consumo de memória

Slide 38

Slide 38 text

No content

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

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];

Slide 41

Slide 41 text

PHP 7.0 NULL COALESCE OPERATOR: ?? // Before $age = isset($data['age']) ? $data['age'] : 100; // After $age = $data['age'] ?? 100;

Slide 42

Slide 42 text

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 }

Slide 43

Slide 43 text

STRICT TYPES = 1 declare(strict_types=1); namespace Foo\Printer; class CsvPrinter implements PrinterInterface { public function __construct(string $foo, float $bar) { // ... } }

Slide 44

Slide 44 text

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 };

Slide 45

Slide 45 text

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

Slide 46

Slide 46 text

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 }

Slide 47

Slide 47 text

NOVIDADES: PHP 7.4 NOV/2019 Preloading* Short closures Typed properties Improved type variance The null coalescing assignment operator muito mais!

Slide 48

Slide 48 text

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)

Slide 49

Slide 49 text

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; }

Slide 50

Slide 50 text

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]; }

Slide 51

Slide 51 text

PHP 8 ❤ JIT (just in time) compiler (vídeo do Zeev)

Slide 52

Slide 52 text

VÍDEO

Slide 53

Slide 53 text

CONSIDERAÇÕES FINAIS PHP é uma das linguagens mais maduras Excelente performance (e vai melhorar!) Desenvolvimento muito rápido!

Slide 54

Slide 54 text

LARAVEL FRAMEWORK http://laravel.com

Slide 55

Slide 55 text

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

Slide 56

Slide 56 text

MERCADO EM BH

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

PHP É FODA SIM!

Slide 59

Slide 59 text

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