Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
PHP FREAKSHOW
LEONARDO TUMADJIAN
PHP EXPERIENCE 2016
ANTES DE COMEÇARMOS:
Contribua com sua comunidade mais próxima, se tiver um tempo ;)
Como contribuir?
ATENÇÃO!
O conteúdo a seguir pode conter cenas fortes, códigos sujos, violência contra as boas práticas, esquisitices, lou...
WELLCOME!
Sejam bem vindos ao PHP Freak Show, o show já vai começar, preparem-se.
VARIÁVEIS VARIÁVEIS!
$freak = 'ola';
$ola = 'como'; 
$como = 'vai'; 
$vai = 'voce'; 
$voce = 'cara';
$cara = 'zoeira'; 
$z...
AGORA A ABERRAÇÃO:
Ainda mais...
// ... 
$obj = 'myRobot'; 
$class = 'Robot'; 
$param1 = 'Robotron'; 
$param2 = 5532;     ...
STANDARD PHP LIBRARY
USAREMOS:
1. ArrayIterator
2. ArrayAccess(Interface)
PRIMEIRA LOUCURA
class Writer extends ArrayIterator 
{ 
    public function offsetGet($index)  
    {
        echo $index ...
SEMPRE PODE PIORAR!
POSSO?
class Crazy implements ArrayAccess  
{ 
    // ... some code here 
    public function offsetGet($offset)  
    {
 ...
AGORA VAMOS USA-LA?
E agora? Onde está seu deus?
// Using the class Crazy! Roda no PHP 7! 
(new Crazy) 
    ['só da']­>col...
VARIADICS
PHP 5.6+
$class = 'Robot'; 
$method = 'talk'; 
$arr = ['hello', 'world']; 
// Old but GOLD 
call_user_func_array...
MÉTODOS MÁGICOS
O mago
Aos Javeiros!
Usando o método __call
class DataMaker
{ 
    protected $matrix; 
    // ... 
    public function __call($name, $args)  
 ...
RETORNO:
object(Customer)[2] 
  public 'nome' => string 'Leonardo' (length=8) 
  public 'telefone' => string '11 97379­775...
ALGUMAS IDEIAS USANDO UM ROUTER:
// A crazy Router interface 
(new GET)['/ola']
        ­>controller('Carro') 
        ­>a...
BOM ACHO QUE ACABAMOS..
// freak instanciator 
function __($class, array $parms=[]) { 
    return new $class(...$parms);
}...
UTILIDADE PÚBLICA..
Owesome solution by Ocramius
$reader = function & ($object, $property) { 
    $value = & Closure::bind...
ESPERO QUE TENHAM GOSTADO
“Yolo lo!” ―Mago do Age of Empires
use function yoloy; 
yoloyolisp(y('yoloyolo', 
    y('lambda'...
OBRIGADO!
HTTPS://JOIND.IN/TALK/328B5
SLIDES E EXEMPLOS EM:
HTTPS://GITHUB.COM/LEOQBC/PHP-FREAKSHOW2
Upcoming SlideShare
Loading in …5
×

PHP Experience 2016 - [Palestra] 20×20: PHP Freakshow – O estranho, o esquisito e o raro

499 views

Published on

Leonardo Tumadjian, Web Consultant e Professor da Impacta Tecnologia, fez a palestra "20×20: PHP Freakshow – O estranho, o esquisito e o raro", no PHP Experience 2016.

O iMasters PHP Experience 2016 aconteceu nos dias 21 e 22 de Março de 2015, no Hotel Tivoli em São Paulo-SP
http://phpexperience2016.imasters.com.br/

Published in: Education
  • Be the first to comment

  • Be the first to like this

PHP Experience 2016 - [Palestra] 20×20: PHP Freakshow – O estranho, o esquisito e o raro

  1. 1. PHP FREAKSHOW LEONARDO TUMADJIAN PHP EXPERIENCE 2016
  2. 2. ANTES DE COMEÇARMOS: Contribua com sua comunidade mais próxima, se tiver um tempo ;) Como contribuir?
  3. 3. ATENÇÃO! O conteúdo a seguir pode conter cenas fortes, códigos sujos, violência contra as boas práticas, esquisitices, loucuras e muito mais.. Em caso de fortes problemas cardíacos prefira: Design Patterns, SOLID, DDD e etc.. Não tente fazer isso em casa, e muito menos no trabalho, obrigado!
  4. 4. WELLCOME! Sejam bem vindos ao PHP Freak Show, o show já vai começar, preparem-se.
  5. 5. VARIÁVEIS VARIÁVEIS! $freak = 'ola'; $ola = 'como';  $como = 'vai';  $vai = 'voce';  $voce = 'cara'; $cara = 'zoeira';  $zoeira = 'never ends!';  echo $$$$$$$freak; // Imprime: never ends!? // ... class Robot  private $precious1 = 'Nooo 1';  protected $precious2 = 'Nooo 2';  public function __get($prop)  {      return $this­>$prop; // <­ Explodindo o encapsulamento!  }  // ...  $robot = new Robot();  echo $robot­>precious1; // Nooo 1  echo $robot­>precious2; // Nooo 2
  6. 6. AGORA A ABERRAÇÃO: Ainda mais... // ...  $obj = 'myRobot';  $class = 'Robot';  $param1 = 'Robotron';  $param2 = 5532;         $method = 'say';  $word = 'Hello Humans';  $$obj = (new $class($param1, $param2))­>$method($word); // Imprime Hello Humans  // ...
  7. 7. STANDARD PHP LIBRARY USAREMOS: 1. ArrayIterator 2. ArrayAccess(Interface)
  8. 8. PRIMEIRA LOUCURA class Writer extends ArrayIterator  {      public function offsetGet($index)       {         echo $index . ' ';          return $this;      } }  $whiter = new Writer();  $whiter['Hello']['World']; // Imprime: Hello World  $whiter['But']['when']['this']['is']['over?']; // Imprime: But when this is over?
  9. 9. SEMPRE PODE PIORAR!
  10. 10. POSSO? class Crazy implements ArrayAccess   {      // ... some code here      public function offsetGet($offset)       {         $this­>phrase[] = $this­>tagIn() . $offset . $this­>tagOut();          return $this;      }     // ...      public function color($colorHex)      {         $last = &$this­>phrase[count($this­>phrase)­1];          $last = '<div style="color: ' . $colorHex .'">'                  . $last . '</div>';          return $this;      }     // ... more code bellow  }
  11. 11. AGORA VAMOS USA-LA? E agora? Onde está seu deus? // Using the class Crazy! Roda no PHP 7!  (new Crazy)      ['só da']­>color('brown')      ['loco']      ['aqui']­>color('red')      ['olha o que']      ['esse barba']      ['esta']­>color('blue')      ['fazendo']     ['que']­>color('red')      ['maluco']      ['das']­>color('green')      ['ideias']  ­>write();
  12. 12. VARIADICS PHP 5.6+ $class = 'Robot';  $method = 'talk';  $arr = ['hello', 'world'];  // Old but GOLD  call_user_func_array([new $class, $method], $arr); // OR WARNING PHP 5.6+  $robot = (new $class)­>$method(...$arr);
  13. 13. MÉTODOS MÁGICOS O mago Aos Javeiros!
  14. 14. Usando o método __call class DataMaker {      protected $matrix;      // ...      public function __call($name, $args)       {         $this­>matrix[$name] = $args[0];          return $this;      }     // ...  } $dados = (new DataMaker)          ­>nome('Leonardo')          ­>telefone('11 95555­2233')          ­>endereco('Rua Teste 123')          ­>teste('colocando char especial')          ­>toClass('Customer');            var_dump($dados);
  15. 15. RETORNO: object(Customer)[2]    public 'nome' => string 'Leonardo' (length=8)    public 'telefone' => string '11 97379­7752' (length=13)    public 'endereco' => string 'Rua Teste 123' (length=13)    public 'teste' => string 'colocando char especial' (length=23)
  16. 16. ALGUMAS IDEIAS USANDO UM ROUTER: // A crazy Router interface  (new GET)['/ola']         ­>controller('Carro')          ­>action('hello');            // A Fluid Interface Programming  request('POST')      ­>to('/cliente')      ­>controller('Carro')      ­>action('hello');  // Pratical Router  $post = new Post; $post['/hello'] = function ($name) {      return 'Hello ' . $name;  };
  17. 17. BOM ACHO QUE ACABAMOS.. // freak instanciator  function __($class, array $parms=[]) {      return new $class(...$parms); } __('FreakPower')      [function () {          echo '1';      }][function () {          echo '2';      }][function () {          echo '3';      }][function () {          echo '4';      }][function () {          echo '5';      }] ­>fire(); // Dispara as closures aleatoriamente, Imprime, ex: 43152 Hey! espera! não, não faça isso!
  18. 18. UTILIDADE PÚBLICA.. Owesome solution by Ocramius $reader = function & ($object, $property) {      $value = & Closure::bind(function & () use ($property) {          return $this­>$property;      }, $object, $object)­>__invoke();      return $value; }; $kitchen = new Kitchen();  $cake    = & $reader($kitchen, 'cake'); // $this­>cake is private  $cake    = 'sorry, I ate it!';  var_dump($kitchen); Reference: Accessing private PHP class members without reflection
  19. 19. ESPERO QUE TENHAM GOSTADO “Yolo lo!” ―Mago do Age of Empires use function yoloy;  yoloyolisp(y('yoloyolo',      y('lambda', y('request'),           y('new', YoLoresPONsE::clASS, y('quote', "yolo u{1f640}"))      ) )); https://yolophp.computer/ https://github.com/igorw/yolo
  20. 20. OBRIGADO!
  21. 21. HTTPS://JOIND.IN/TALK/328B5 SLIDES E EXEMPLOS EM: HTTPS://GITHUB.COM/LEOQBC/PHP-FREAKSHOW2

×