SlideShare uma empresa Scribd logo
1 de 64
Baixar para ler offline
Top 10 

chausse-trappes 

en PHP
AFUP Aix-Marseille 2019
Agenda
1 heure
Top 10+ chausses-trappes PHP
Améliorez votre code dès maintenant
Ca peut attendre demain
QUI PARLE?
➤ Damien Seguy
➤ Directeur technique Exakat
➤ Analyse statique de code PHP
➤ Maison de retraite pour elephpant
Erreur tapie dans le code
Un puit de performances
Un outil pratique
La voie de l'éléphpant
🐞
🛠
🐘
🚀
La légende de strpos()
<?php
if (strpos($string, 'a'))  { }
if (strpos($string, 'a') == 0) { }
if ($x = strpos($string, 'a')) { }
🐞
Comparaison strpos
<?php
// La seule comparaison possible pour 0/false
if (strpos($string, 'a') === false) { }
// Pas de 0, pas de confusion
if (strpos($string, 'a') == 2) { }
// strpos n'est pas la seule!
if (preg_match($regex, $string)) { }
🐘
comparaison strpos
array_search()
collator_compare()
collator_get_sort_key()
current()
fgetc()
file_get_contents()
file_put_contents()
fread()
iconv_strpos()
iconv_strrpos()
imagecolorallocate()
imagecolorallocatealpha()
mb_strlen()
next()
pcntl_getpriority()
preg_match()
prev()
readdir()
stripos()
strpos()
strripos()
strrpos()
strtok()
curl_exec()
Define()
<?php 
define('A', true);
?>
🚀
Define() vers const
<?php 
const A = true;
?>
🐘
Define() en déclin
<?php  
define('A', 3, true); 
define($x, $y); 
?>
🛠
define() vers const
<?php 
const A = true;
const B = 33 + 12 * (23 - 34);
const C = array(A, B, D::E);
const D = A ? B : C;
?>
🛠
Affichages répétés
<?php
  print 'a';
  print $b ;
  print 'c';
?>
🚀
Affichages répétés
<?php
  print 'a' . $b . 'c';
?>
🚀
Affichages répétés
<?php
  echo  'a' , $b , 'c';
?>
🐘
Affichages répétés
<?php
  echo  'a',
$b ,
'c';
?>
echo ne fonctionne pas
<?php
  echo( 'a',
$b ,
'c',
);
?>
<?php
$b = 3; $c = 1;
$a1 = $b and $c;
$a2 = $b && $c;
?>
🐞
La logique en toutes lettres
La logique en toutes lettres
<?php
$b = 3; $c = 1;
$a1 = ($b and $c);
$a2 = $b && $c;
?>
🐘
L'ordre en toutes lettres
<?php   
echo -3 ** 2;
$x = new stdClass();
var_dump(!$x instanceof stdClass);
?>
🐞
Loin du réel
<?php
// Ne plus utiliser
if (!is_real($a)) {
    $a = (real) $a;
}
?>
🐞
Ca flotte…
<?php
if (!is_float($a)) {
    $a = (float) $a;
}
?>
🐘
// Toujours valide en 7.4
Se mesurer au réel
<?php
$a = 1/7;
$b = 2.0;
var_dump( 7 * $a === 1);
var_dump( (0.1 + 0.7) * 10 == 8);
var_dump( (0.1 + 0.7) * 10);
?>
🐞
Se mesurer au réel
<?php 
$a = 1/7; 
$c = ((0.1 + 0.7) * 10) - 8;
// calcul de précision
var_dump( abs($c) < 0.0001); 
?>
🐘
Substr(,,1) ?
<?php
$string = "abcde";
echo substr($string, $pos, 1);
?>
🚀
Substr(,,1) ?
<?php
$string = "abcde";
echo substr($string, $pos, 1);
echo $string[$pos];
?>
🐘
Substr(,,1) ?
<?php
$string = "abcde";
echo substr($string, -1, 1);
echo $string[-1];
?>
🐘
Substr(,,1) ?
<?php
$string = "ab⼈人cde";
echo substr($string, $pos, 1);
echo $string[$pos];
echo mb_substr($string, $pos, 1);
// $pos = 1 => bbb
// $pos = 2 => ??⼈人
?>
🐘
Toujours substr()
<?php
$result = substr(strtolower($s), $o, $l);
?>
🚀
Substr() d'abord!
<?php
$result = strtolower(substr($s, $o, $l));
?>
🐘
array_slice() d'abord!
<?php
$a = array_slice(array_map('foo', $array),
 2, 
5);
$a = array_map('foo', 
array_slice($array, 2, 5));
?>
🚀
🐘
array_merge() en boucle
<?php
$res = $sqlite3->query(
'SELECT lists FROM table');
while ($row = $res->fetchArray(PDO_ASSOC)) {
  $l = explode(',', $row['value']);
  $final = array_merge($final, $l);
}
?>
🚀
array_merge() en boucle
<?php 
$res = $sqlite3->query(

'SELECT lists FROM table'); 
while ($row = $res->fetchArray(PDO_ASSOC)) { 
  $l = explode(',', $row['value']); 
  $a []=  $l;
}
$final = array_merge(...$a); 
?>
🐘
concat en boucle
<?php
$res = $sqlite3->query(
'SELECT value FROM table');
while ($row = $res->fetchArray(PDO_ASSOC)) {
  $a .= $row['value'];
}
?>
🚀
concat en boucle
<?php 
$res = $sqlite3->query(
        'SELECT value FROM table'); 
$a = array();
while ($row = $res->fetchArray(PDO_ASSOC)) { 
  $a []= $row['value']; 
} 
$final = implode('', $a);
?>
🐘
addition en boucle
<?php
$res = $sqlite3->
query('SELECT quantite FROM table');
while ($row = $res->fetchArray(PDO_ASSOC)) {
  $a += $row['quantite'];
}
?>
🐘
Vu
A
la
tElE
<?php
function g1() : Generator {
 for ($i = 0; $i < 4; ++$i ) { yield $i; }
}
function g2() : Generator {
 for ($i = 5; $i < 10; ++$i ) { yield $i; }
}
function aggregator() : Generator {
     yield from g1();
     yield from g2();
}
print_r(iterator_to_array());
Yield la clé 🐞
/*
Array
(
    [0] => 6
    [1] => 7
    [2] => 8
    [3] => 9
    [4] => 4  
    [5] => 5  
)
*/
Yield la clé
<?php
function g1() : Generator {
for ($i = 0; $i < 4; ++$i) { yield $i => $i; }
}
function g2() : Generator {
 for ($i = 5; $i < 10; ++$i) { yield $i => $i;}
}
function aggregator() : Generator {
     yield from g1();
     yield from g2();
}
print_r(iterator_to_array());
Yield la clé 🐘
/*
0 
1
2
3
4
5
6
7
8
9
*/
Yield la clé
Le sous-motif qui manque
<?php
preg_match('/(a)(b)?/', 'abc', $r);
/*
Array
(
    [0] => ab
    [1] => a
    [2] => b
)
*/
?>
🐞
Le sous-motif qui manque
<?php
preg_match('/(a)(b)?/', 'adc', $r);
/*
Array
(
    [0] => a
    [1] => a
)
*/
🐞
Le sous-motif qui manque
<?php
preg_match('/(a)(b)?(.)/', 'adc', $r);
/*
Array
(
    [0] => ad
    [1] => a
    [2] => 
    [3] => d
)
*/
🐘
La marque sans-nom™
<?php  
preg_match('/(?<ici>a)(b)?(.)/', 'adc', $r); 
preg_match("/(?'ici'a)(b)?(.)/", 'adc', $r); 
print_r($r);
/*
Array
(
    [0] => ad
[ici] => a
    [1] => a
    [2] => 
    [3] => d
)
*/
🐘
Ne pas unset() les propriétés
<?php 
class x {
  public $y = 1;
}
$x = new x();
unset($x->y);
print_r($x);
?>
x Object
(
)
🐞
Ne pas unset() les propriétés
<?php 
class x { 
 public $y = 1; 
} 
$x = new x(); 
$x->y = null; 
var_dump(isset($x->y));
print_r($x); 
?>
bool(false)
x Object
(
[y] =>
)
🐘
Ne pas unset() les propriétés
<?php 
class x {
  public $y = 1;
}
$x = new x();
$x->z = 3;
print_r($x);
?>
x Object
(
[y] => 1
[z] => 3
)
🛠
Propriété non-initialisée
<?php  
class x {  
  function foo() {
   if (!isset($this->y)) {
    $this->y = 0;
  }
  
   return $this->y++;
}  
?>
🚀
Propriété non-initialisée
<?php  
class x {  
 public $y = 0; 
  function foo() {
   if ($this->y === null) {
    $this->y = 0;
  }
  }
  
   return $this->y++;
}  
?>
🐘
Le mois prochain
<?php
echo date('F', 
strtotime('+1 month',
mktime(0,0,0,$i,31,2019)));
?>
// 1er janvier => 1er février
// 31 octobre => 1er décembre
// 31 janvier => 2 ou 3 mars
🐞
Le mois prochain
<?php
echo date('F', 
strtotime('first day of next month',
mktime(0,0,0,$i,31,2019)));
?>
// 1er janvier => 1er février
// 31 octobre => 1 novembre
// 31 janvier => 1er février
🐘
C'est quand, demain?
<?php
$demain = time() + 86400;
?>
🐞
C'est quand, demain?
<?php
$demain = new DateTime('tomorrow');
?>
🐘
Combien dure mon script?
<?php  
$debut = microtime(true);
// grosse masse de code magnifique
$fin = microtime(true);
print number_format(($fin - $debut), 
2)
.'ms';
?>
🐞
Combien dure mon script?
<?php   
$debut = hrtime(true); 
// grosse masse de code magnifique 
$fin = hrtime(true); 
print number_format(($fin - $debut) / 1000000, 
2)
.'ms';
?>
🐘
Et maintenant ?
<?php
// version rapide
$a = time();
// version lente
$b = strtotime('now');
?>
🚀
La vengence de la
référence
<?php 
$a = range(0, 3);
foreach($a as &$b) { }
foreach($a as $b) { }
print_r($a);
?>
Array
(
[0] => 0
[1] => 1
[2] => 2
[3] => 2
)
🐞
La vengence de la
référence
<?php  
$a = range(0, 3); 
foreach($a as &$b) { } 
unset($b);
foreach($a as $b) { } 
print_r($a); 
?>
Array
(
[0] => 0
[1] => 1
[2] => 2
[3] => 3
)
🐘
list() en PHP 4
<?php  
list($a, $b) = array( 1, 2, 3);
?>
🛠
list() en PHP 5
<?php  
[$a, $b] =  [ 1, 2, 3];
?>
🛠
🐘
list() en PHP 7
<?php  
['c' => $a, 'e' => ['d'=> $b]] = 
['c' => 1,  
'e' =>['d' => 2, 
'f' => 3,]
,];
?>
🛠
🐘
list() en PHP 7
<?php  
['e' => $a, 'e' => ['d'=> $b]] = 
['c' => 1,  
'e' =>['d' => 2, 
'f' => 3,]
,];
?>
🛠
🐘
List() pour le futur!
<?php 
$res = $sqlite3->query(
           'SELECT lists FROM table'); 
foreach($res->fetchArray(SQLITE3_ASSOC) 
as ['lists' => $list]) { 
  $l = explode(',', $list); 
$a[] = $l;
} 
  $final = array_merge(…$a); 
?>
🛠
🐘
Encore plus ?
🛠
🐘Exakat
Analyse statique de votre code
Prépare pour PHP 7.4 / 8.0 (parbleu!)
Modernise votre code
https://www.exakat.io/
Gramaci!
@exakat

Mais conteúdo relacionado

Mais procurados

Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEIntroduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEMarouan OMEZZINE
 
PHP 7.0 : aperçu des nouveautés
PHP 7.0 : aperçu des nouveautésPHP 7.0 : aperçu des nouveautés
PHP 7.0 : aperçu des nouveautésDidcode
 
JavaScript prise en main et fondamentaux
JavaScript prise en main et fondamentauxJavaScript prise en main et fondamentaux
JavaScript prise en main et fondamentauxVincent Petetin
 
Formation PHP
Formation PHPFormation PHP
Formation PHPkemenaran
 
Les patrons de conception du composant Form
Les patrons de conception du composant FormLes patrons de conception du composant Form
Les patrons de conception du composant FormVladyslav Riabchenko
 
Migration PHP4-PHP5
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5julien pauli
 
Sécurité et Quaité de code PHP
Sécurité et Quaité de code PHPSécurité et Quaité de code PHP
Sécurité et Quaité de code PHPJean-Marie Renouard
 
Introduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINEIntroduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINEMarouan OMEZZINE
 
Nadia T\'s Menu Card
Nadia T\'s Menu CardNadia T\'s Menu Card
Nadia T\'s Menu Cardnadia.tariq
 
Pots de Miel, Honeypot informatique - Sécurité informatique
Pots de Miel, Honeypot informatique - Sécurité informatiquePots de Miel, Honeypot informatique - Sécurité informatique
Pots de Miel, Honeypot informatique - Sécurité informatique🏁 Pierre-Henry Soria 💡
 
Per lameliorer
Per lameliorerPer lameliorer
Per lameliorerTECOS
 
Créer une barre de progression grâce à PHP 5.4
Créer une barre de progression grâce à PHP 5.4Créer une barre de progression grâce à PHP 5.4
Créer une barre de progression grâce à PHP 5.4🏁 Pierre-Henry Soria 💡
 

Mais procurados (18)

Cours php
Cours phpCours php
Cours php
 
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEIntroduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINE
 
PHP 7.0 : aperçu des nouveautés
PHP 7.0 : aperçu des nouveautésPHP 7.0 : aperçu des nouveautés
PHP 7.0 : aperçu des nouveautés
 
JavaScript prise en main et fondamentaux
JavaScript prise en main et fondamentauxJavaScript prise en main et fondamentaux
JavaScript prise en main et fondamentaux
 
Formation PHP
Formation PHPFormation PHP
Formation PHP
 
Les patrons de conception du composant Form
Les patrons de conception du composant FormLes patrons de conception du composant Form
Les patrons de conception du composant Form
 
Chap2
Chap2Chap2
Chap2
 
Migration PHP4-PHP5
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5
 
Sécurité et Quaité de code PHP
Sécurité et Quaité de code PHPSécurité et Quaité de code PHP
Sécurité et Quaité de code PHP
 
Introduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINEIntroduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINE
Introduction au langage PHP (2éme partie) élaborée par Marouan OMEZZINE
 
Nadia T\'s Menu Card
Nadia T\'s Menu CardNadia T\'s Menu Card
Nadia T\'s Menu Card
 
Pots de Miel, Honeypot informatique - Sécurité informatique
Pots de Miel, Honeypot informatique - Sécurité informatiquePots de Miel, Honeypot informatique - Sécurité informatique
Pots de Miel, Honeypot informatique - Sécurité informatique
 
PHP &amp; MySQL
PHP &amp; MySQLPHP &amp; MySQL
PHP &amp; MySQL
 
Per lameliorer
Per lameliorerPer lameliorer
Per lameliorer
 
Créer une barre de progression grâce à PHP 5.4
Créer une barre de progression grâce à PHP 5.4Créer une barre de progression grâce à PHP 5.4
Créer une barre de progression grâce à PHP 5.4
 
[20110219] pfffについて
[20110219] pfffについて[20110219] pfffについて
[20110219] pfffについて
 
Cours php
Cours phpCours php
Cours php
 
Gestion de formulaires en PHP
Gestion de formulaires en PHPGestion de formulaires en PHP
Gestion de formulaires en PHP
 

Semelhante a Top 10 chausse trappes

Analyse statique et applications
Analyse statique et applicationsAnalyse statique et applications
Analyse statique et applicationsDamien Seguy
 
Trucs et astuces PHP et MySQL
Trucs et astuces PHP et MySQLTrucs et astuces PHP et MySQL
Trucs et astuces PHP et MySQLDamien Seguy
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP NextSQLI
 
Les principes de base de PHP
 Les principes de base de PHP  Les principes de base de PHP
Les principes de base de PHP EL JAOUARI Ahmed
 
PHP - get started
PHP - get startedPHP - get started
PHP - get startedmazenovi
 
A la recherche du code mort
A la recherche du code mortA la recherche du code mort
A la recherche du code mortDamien Seguy
 
Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4Damien Seguy
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptMicrosoft Technet France
 
Google Spreadsheet, astuces et fonctions cachées pour ne plus vous en passer ...
Google Spreadsheet, astuces et fonctions cachées pour ne plus vous en passer ...Google Spreadsheet, astuces et fonctions cachées pour ne plus vous en passer ...
Google Spreadsheet, astuces et fonctions cachées pour ne plus vous en passer ...iProspect France
 
Tirer parti des décorateurs de Zend_Form
Tirer parti des décorateurs de Zend_FormTirer parti des décorateurs de Zend_Form
Tirer parti des décorateurs de Zend_FormMickael Perraud
 
Cryptographie 101 Pour les programmeurs (PHP)
Cryptographie 101 Pour les programmeurs (PHP)Cryptographie 101 Pour les programmeurs (PHP)
Cryptographie 101 Pour les programmeurs (PHP)Philippe Gamache
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech daysJean-Pierre Vincent
 
PHP 5.3 : les nouveautés du futur si proche
PHP 5.3 : les nouveautés du futur si prochePHP 5.3 : les nouveautés du futur si proche
PHP 5.3 : les nouveautés du futur si prochePascal MARTIN
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHPjulien pauli
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Dr Samir A. ROUABHI
 
Coffee script
Coffee scriptCoffee script
Coffee scriptantho1404
 
Meet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaireMeet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaireJulien Vinber
 

Semelhante a Top 10 chausse trappes (20)

Analyse statique et applications
Analyse statique et applicationsAnalyse statique et applications
Analyse statique et applications
 
test doc
test doctest doc
test doc
 
Trucs et astuces PHP et MySQL
Trucs et astuces PHP et MySQLTrucs et astuces PHP et MySQL
Trucs et astuces PHP et MySQL
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP Next
 
Les principes de base de PHP
 Les principes de base de PHP  Les principes de base de PHP
Les principes de base de PHP
 
PHP - get started
PHP - get startedPHP - get started
PHP - get started
 
A la recherche du code mort
A la recherche du code mortA la recherche du code mort
A la recherche du code mort
 
Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4Tout pour se préparer à PHP 7.4
Tout pour se préparer à PHP 7.4
 
Patterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScriptPatterns et bonnes pratiques autour de JavaScript
Patterns et bonnes pratiques autour de JavaScript
 
Google Spreadsheet, astuces et fonctions cachées pour ne plus vous en passer ...
Google Spreadsheet, astuces et fonctions cachées pour ne plus vous en passer ...Google Spreadsheet, astuces et fonctions cachées pour ne plus vous en passer ...
Google Spreadsheet, astuces et fonctions cachées pour ne plus vous en passer ...
 
Tirer parti des décorateurs de Zend_Form
Tirer parti des décorateurs de Zend_FormTirer parti des décorateurs de Zend_Form
Tirer parti des décorateurs de Zend_Form
 
Cryptographie 101 Pour les programmeurs (PHP)
Cryptographie 101 Pour les programmeurs (PHP)Cryptographie 101 Pour les programmeurs (PHP)
Cryptographie 101 Pour les programmeurs (PHP)
 
Function oop - bonnes pratiques ms tech days
Function   oop - bonnes pratiques ms tech daysFunction   oop - bonnes pratiques ms tech days
Function oop - bonnes pratiques ms tech days
 
PHP.pptx
PHP.pptxPHP.pptx
PHP.pptx
 
PHP 5.3 : les nouveautés du futur si proche
PHP 5.3 : les nouveautés du futur si prochePHP 5.3 : les nouveautés du futur si proche
PHP 5.3 : les nouveautés du futur si proche
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
 
Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)Présentation Javascript à l'ESI (Alger)
Présentation Javascript à l'ESI (Alger)
 
De legacy à symfony
De legacy à symfonyDe legacy à symfony
De legacy à symfony
 
Coffee script
Coffee scriptCoffee script
Coffee script
 
Meet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaireMeet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaire
 

Mais de Damien Seguy

Strong typing @ php leeds
Strong typing  @ php leedsStrong typing  @ php leeds
Strong typing @ php leedsDamien Seguy
 
Strong typing : adoption, adaptation and organisation
Strong typing : adoption, adaptation and organisationStrong typing : adoption, adaptation and organisation
Strong typing : adoption, adaptation and organisationDamien Seguy
 
Qui a laissé son mot de passe dans le code
Qui a laissé son mot de passe dans le codeQui a laissé son mot de passe dans le code
Qui a laissé son mot de passe dans le codeDamien Seguy
 
Top 10 pieges php afup limoges
Top 10 pieges php   afup limogesTop 10 pieges php   afup limoges
Top 10 pieges php afup limogesDamien Seguy
 
Top 10 php classic traps DPC 2020
Top 10 php classic traps DPC 2020Top 10 php classic traps DPC 2020
Top 10 php classic traps DPC 2020Damien Seguy
 
Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)Damien Seguy
 
Top 10 php classic traps confoo
Top 10 php classic traps confooTop 10 php classic traps confoo
Top 10 php classic traps confooDamien Seguy
 
Top 10 php classic traps php serbia
Top 10 php classic traps php serbiaTop 10 php classic traps php serbia
Top 10 php classic traps php serbiaDamien Seguy
 
Top 10 php classic traps
Top 10 php classic trapsTop 10 php classic traps
Top 10 php classic trapsDamien Seguy
 
Code review workshop
Code review workshopCode review workshop
Code review workshopDamien Seguy
 
Understanding static analysis php amsterdam 2018
Understanding static analysis   php amsterdam 2018Understanding static analysis   php amsterdam 2018
Understanding static analysis php amsterdam 2018Damien Seguy
 
Review unknown code with static analysis php ce 2018
Review unknown code with static analysis   php ce 2018Review unknown code with static analysis   php ce 2018
Review unknown code with static analysis php ce 2018Damien Seguy
 
Everything new with PHP 7.3
Everything new with PHP 7.3Everything new with PHP 7.3
Everything new with PHP 7.3Damien Seguy
 
Php 7.3 et ses RFC (AFUP Toulouse)
Php 7.3 et ses RFC  (AFUP Toulouse)Php 7.3 et ses RFC  (AFUP Toulouse)
Php 7.3 et ses RFC (AFUP Toulouse)Damien Seguy
 
Tout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFCTout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFCDamien Seguy
 
Review unknown code with static analysis php ipc 2018
Review unknown code with static analysis   php ipc 2018Review unknown code with static analysis   php ipc 2018
Review unknown code with static analysis php ipc 2018Damien Seguy
 
Code review for busy people
Code review for busy peopleCode review for busy people
Code review for busy peopleDamien Seguy
 
Static analysis saved my code tonight
Static analysis saved my code tonightStatic analysis saved my code tonight
Static analysis saved my code tonightDamien Seguy
 
Machine learning in php las vegas
Machine learning in php   las vegasMachine learning in php   las vegas
Machine learning in php las vegasDamien Seguy
 
Review unknown code with static analysis Zend con 2017
Review unknown code with static analysis  Zend con 2017Review unknown code with static analysis  Zend con 2017
Review unknown code with static analysis Zend con 2017Damien Seguy
 

Mais de Damien Seguy (20)

Strong typing @ php leeds
Strong typing  @ php leedsStrong typing  @ php leeds
Strong typing @ php leeds
 
Strong typing : adoption, adaptation and organisation
Strong typing : adoption, adaptation and organisationStrong typing : adoption, adaptation and organisation
Strong typing : adoption, adaptation and organisation
 
Qui a laissé son mot de passe dans le code
Qui a laissé son mot de passe dans le codeQui a laissé son mot de passe dans le code
Qui a laissé son mot de passe dans le code
 
Top 10 pieges php afup limoges
Top 10 pieges php   afup limogesTop 10 pieges php   afup limoges
Top 10 pieges php afup limoges
 
Top 10 php classic traps DPC 2020
Top 10 php classic traps DPC 2020Top 10 php classic traps DPC 2020
Top 10 php classic traps DPC 2020
 
Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)Meilleur du typage fort (AFUP Day, 2020)
Meilleur du typage fort (AFUP Day, 2020)
 
Top 10 php classic traps confoo
Top 10 php classic traps confooTop 10 php classic traps confoo
Top 10 php classic traps confoo
 
Top 10 php classic traps php serbia
Top 10 php classic traps php serbiaTop 10 php classic traps php serbia
Top 10 php classic traps php serbia
 
Top 10 php classic traps
Top 10 php classic trapsTop 10 php classic traps
Top 10 php classic traps
 
Code review workshop
Code review workshopCode review workshop
Code review workshop
 
Understanding static analysis php amsterdam 2018
Understanding static analysis   php amsterdam 2018Understanding static analysis   php amsterdam 2018
Understanding static analysis php amsterdam 2018
 
Review unknown code with static analysis php ce 2018
Review unknown code with static analysis   php ce 2018Review unknown code with static analysis   php ce 2018
Review unknown code with static analysis php ce 2018
 
Everything new with PHP 7.3
Everything new with PHP 7.3Everything new with PHP 7.3
Everything new with PHP 7.3
 
Php 7.3 et ses RFC (AFUP Toulouse)
Php 7.3 et ses RFC  (AFUP Toulouse)Php 7.3 et ses RFC  (AFUP Toulouse)
Php 7.3 et ses RFC (AFUP Toulouse)
 
Tout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFCTout sur PHP 7.3 et ses RFC
Tout sur PHP 7.3 et ses RFC
 
Review unknown code with static analysis php ipc 2018
Review unknown code with static analysis   php ipc 2018Review unknown code with static analysis   php ipc 2018
Review unknown code with static analysis php ipc 2018
 
Code review for busy people
Code review for busy peopleCode review for busy people
Code review for busy people
 
Static analysis saved my code tonight
Static analysis saved my code tonightStatic analysis saved my code tonight
Static analysis saved my code tonight
 
Machine learning in php las vegas
Machine learning in php   las vegasMachine learning in php   las vegas
Machine learning in php las vegas
 
Review unknown code with static analysis Zend con 2017
Review unknown code with static analysis  Zend con 2017Review unknown code with static analysis  Zend con 2017
Review unknown code with static analysis Zend con 2017
 

Top 10 chausse trappes