SlideShare ist ein Scribd-Unternehmen logo
1 von 53
Downloaden Sie, um offline zu lesen
Lorem Ipsum Dolor
A la recherche du
code mort
AFUP, Paris
Agenda
❖ Qu'est-ce que du code mort
❖ Code mort classique en PHP
❖ Supprimer le code mort
Conférencier
❖ Damien Seguy
❖ Exakat CTO
❖ Ik ben een boterham
❖ Analyse statique de code PHP : SCAP
Code mort
❖ Le code jamais utilisé
❖ Les résultats jamais utilisés
❖ Le contraire de :
PHP Fatal error: Uncaught Error: Call to
undefined function foo()
Code mort
<?php
function foo() {}
$y = rand(0, 12);
echo 'two';
?>
if ($y == 2) {
   echo 'deux';
} 
?>
Code mort
<?php 
class A implements B {}
interface B {}
?>
<?php
interface B implementedBy A,B,C {}
class A {}
?>
Il serait beaucoup mieux de pouvoir écrire
Code mort en PHP
❖ Installation de base
❖ 766 fonctions
❖ 92 classes
❖ 1024 constantes
❖ Éviter de compiler 

trop d'extensions
❖ Utilisez disable_functions
Pourquoi faire la chasse ?
❖ Les sources sont plus grandes
❖ Le code est moins maintenable
❖ Le code mort est souvent maintenu
❖ Le code est plus lent
❖ Le code mort grandit au fil dutemps
Pourquoi garder le code mort ?
❖ Personne n'a jamais été viré pour l'avoir gardé
❖ Pourquoi corriger ce qui marche bien
❖ Tous les tests passent pour ce code
❖ D'autres parties du code dépendent de ce code
❖ Le code source croit toujours
❖ On a pas le temps pour ça!
Comment rechercher le code mort?
❖ Identifier du code
❖ Rechercher son utilisation et ses impacts
❖ Retirer chacun un par un
❖ Retirer le code mort
Trois types de code mort
❖ Code mort classique
❖ Code mort à la mode PHP
❖ Code mort structurel
Code mort classique
Mort dans toutes les langues
Code inaccessible
<?php
if (false) {
   print_r($variable);
}
if (0) { 
   // Gros morceau de code
   // fonctionnalité en développem
// code avec bug
} 
?>
❖ Débogage de 

mon grand-père
Code inaccessible
<?php
function foo($bar) {
   for($i = 0; $i < 10; $i++) {
     $bar *= 2;
      
     exit; // ou die
     $bar += 1;
   }
}
?>
❖ Code inaccessible
Code inaccessible
<?php
function foo($bar) {
   for($i = 0; $i < 10; $i++) {
    $bar *= 2;
      
     continue;
     $bar += 1;
   }
}
?>
❖ Code inaccessible
Code inaccessible
<?php
function foo($bar) {
   for($i = 0; $i < 10; $i++) {
     $bar *= 2;
      
     break 1;
     $bar += 1;
   }
}
?>
❖ Code inaccessible
Code inaccessible
<?php
function foo($bar) {
   $bar *= 2;
   
   return $bar;
   $bar += 1;
   return $bar;
}
?>
❖ Code inaccessible
Code inaccessible
<?php
$bar *= 2;
goto END:
$bar += 1;
      
exit; 
end:
print $bar;
?>
❖ Code inaccessible
Unreachable code
<?php
$bar = 2;
goto END;
 
class X {
   const ONE = 1;
}
exit; 
END:
print $bar . X::ONE;
?>
❖ Code inaccessible
❖ Mais pas les 

définitions
Variables inutilisées
<?php 
$uneFois = "Bonjour AFUP";
?>
❖ Les variables mythiques
'utilisées une fois'
❖ 75% des sources contiennent
des variables
❖ Global ou local à un
contexte
❖ Attention aux imports en
masse $_GET/_POST
<?php 
echo $utiliséUneFois;
?>
Variables inutiles
<?php  
function foo() {
  $a = "Bonjour AFUP"; 
  //more code 
  $a = "Bonjour PHP Tour"; 
  //more code
  $a .= " et les autres"; 
}
?>
❖ Variables
uniquement écrites
❖ Dans une fonction
❖ Variables
uniquement lues
sont OK, mais
méritent de
l'attention
Code mort à la mode
PHP
Quelques squelettes dans les placards
Clause default dans switch()
<?php   
switch($x) {   
    case '1' :    
        break;   
    default :    
        break;   
    default :    
        break;   
    case '2' :    
        break;   
}   
❖ PHP 7.0+ : Fatal error
❖ l'ordre des 'case' n'est
pas important
Le cas des cases
❖ Switch() utilise ==
❖ Les valeurs sont transtypées
switch($x) {   
    case 1 :    
        break;   
    case 0+1 :    
        break;   
    case '1' :    
        break;   
    case true :    
        break;   
    case 1.0 :    
        break;   
    case $y :    
        break;   
}   
Les index des tableaux
<?php
$a = [ true  => 1, 
       1.0  => 2, 
       1.1  => 3, 
       4,
       "1.4" => 5,
       2  => 6];
       
print_r($a);
?>
❖ Uniquement int et string
❖ Attention aux mélanges entre les
index fixes et auto-générés.
Array
(
[1] => 3
[2] => 6
[1.4] => 5
)
Le code mort s'exhibe
<?php
try {
   doSomething();
} catch (NotAnException $e) {
} catch (MyExxeption $e) {
} catch (Exception $e) {
} catch (MyException $e) {
}
❖ Classes inexistantes
❖ Non-exceptions
❖ Ordre des exceptions,

de spécifique à
général
❖ Simplement ignorée
Instanceof
❖ La cible est l'espace

de noms courant
<?php
class MaClass {}
$o = new MaClass();
if ($o instanceof MaClass) {
   print "MaClass est trouvéen";
}
?>
Instanceof
❖ La cible est l'espace

de noms courant
❖ Attention à l'ajout

d'espaces de noms
<?php
namespace {
class MyClass {}
}
namespace X {
$o = new MyClass();
if ($o instanceof MyClass) {
    print "Found MyClassn";
}
}
?>
Instanceof
❖ Noms complets

dans les

chaînes
namespace {
class MyClass {}
}
namespace X {
$o = new MyClass();
$a = 'XMyClass';
if ($o instanceof $a) {
    print "Found MyClass with $a
}
}
Typehint
❖ Les typehint ne
sont pas vérifiés
❖ On peut vérifier
les typehint à
l'exécution
<?php
class foo {}
$o = new foo();
function bar(fooo $a) {}
bar($o);
?>
PHP Fatal error: Uncaught TypeError: Argument 1 passed to
bar() must be an instance of fooo, instance of foo given,
Code mort structurel
Fichiers
Constantes
Variables
Functions
Classes
Interfaces
Traits
Synopsis
❖ Définitions
❖ Usage
❖ Quelques pièges inévitables
❖ Appels dynamiques
Structural dead code
Traits
Interfaces
Classes
Functions
Constantes
Fichiers
Traits
<?php
trait t1 {
   use t2;
}
class c {
   use t1;
}
?>
Traits
❖ Utilisées dans les 'use' de classes
❖ Utilisées dans les 'use' de traits
❖ Utilizes dans les appels de
méthode statiques, ou de
propriétés statiques
<?php
trait t1 {
   use t2;
}
class c {
   use t1;
}
?>
Traits
❖ Facile à repérer : appels statique
❖ En espace de noms, avec des alias
❖ Les dépendances locales conduisent

à plus de code mort
<?php 
use t1 as t3;
trait t1 { 
   use t2; 
} 
class c { 
   use t3; 
} 
?>
Traits
<?php
trait t {
   function setName($name) {
     $this->name = $this->normalize($name);
  }
}
class bar {
   use t;
   private $name = 'aucun';
   function normalize($string) {}
}
?>
Interfaces
<?php
interface i2 { }
interface i1 implements i2 { }
class c implements i1 { }
?>
Interfaces
❖ Utilisée dans
❖ les classes
❖ les interfaces
❖ les constante statiques
❖ Les instanceof, catch et type hint
<?php 
interface i2 { const konst = 
interface i1 implements i2 { 
class c implements i1 { } 
echo i2::konst;
?>
Interfaces
❖ Peuvent finir en
chaînes
❖ Peuvent hériter des
parents
<?php 
interface i2 { const konst = 3; 
interface i1 implements i2 { } 
$interfaceName = 'i2';
if ($object instanceof $interfac
echo i1::konst;
?>
Classes
<?php
classes c1  { }
class c2 extends c1 { }
new c2();
?>
Classes
❖ Utilisées dans
❖ Les autres classes
❖ les appels statiques
❖ constantes, propriétés, méthodes
❖ les appels normaux
❖ instanceof, catch, typehint
❖ les instantiations : new
<?php
class c1  { }
class c2 extends c1
new c2();
?>
Classes
❖ new a / new a()
❖ Appels
dynamiques un
peu partout
❖ Gestion des mots
spéciaux : parent,
self, static
<?php
class foo {
   const ONE = 1;
   const TWO = self::ONE + 1;
}
class bar extends foo {
   const THREE = parent::TWO + s
}
$class = 'bar';
$o = new bar;
?>
Classes
❖ Dépendances
circulaires
❖ S'applique aussi
aux traits et aux
interfaces
<?php 
class foo extends bar { 
   const TWO = bar::ONE + 1; 
} 
class bar extends foo { 
   const ONE = bar::ONE;
} 
?>
PHP Fatal error: Class 'bar' not found
Classes
❖ Dépendance
circulaire vicieuse
<?php 
class foo { 
   const ONE = 1; 
   const TWO = bar::ONE + 1; 
} 
class bar { 
   const ONE = foo::TWO;
} 
echo bar::ONE;
PHP Fatal error: Uncaught Error: Cannot declare self-
referencing constant 'foo::TWO' on line 12
❖ Interfaces, traits puis classes
❖ Commencez avec les positions basses, puis les moins
utilisées
Functions
❖ Utilisées dans les appels

de fonction
❖ Dépend des espaces de 

noms, et les alias
❖ Utilises dans les fonctions

natives array_map(),…
<?php
function foo() {}
array_map('foo', $array);
?>
Constantes
❖ Définies avec const, define
❖ Insensible à la casse, parfois
❖ Les constant() dynamiques
❖ Espaces de noms, alias
❖ Utilisées dans les expressions

statiques
❖ Encore des dépendances vicieuses
<?php 
define(ONE, 1, true);
const TWO = ONE + 1; 
$constant = 'TWO';
echo constant($constant
?>
Inclusions
❖ include/require, /_once
❖ new() parce que autoload()
❖ Constantes statiques, propriété statiques, appels de
méthodes statiques
❖ L'ordre est important, car les inclusions s'exécutent
<?php 
include 'file.php';
?>
Comment repérer du code mort
❖ Connaissance du code
❖ lint
❖ Grep / Chercher
❖ Analyse statique
❖ Logs / error_reporting
❖ Tests unitaires
Quand chasser le code mort?
❖ Comme relaxation quotidienne
❖ Ma meilleure journée de 

programmation fut la 

suppression de 200 classes
❖ trigger_error($msg,
E_USER_DEPRECATED) et 

debug_backtrace()
❖ Sentez en vous la puissance du code vivant
Merci!
@exakat
http://www.exakat.io/
http://slideshare.net/dseguy/

Weitere ähnliche Inhalte

Was ist angesagt?

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 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3Eddy RICHARD
 
La référence Clear php
La référence Clear phpLa référence Clear php
La référence Clear phpDamien Seguy
 
Annexes du Document sur l'Auto provisioning, contacts, presence et streaming ...
Annexes du Document sur l'Auto provisioning, contacts, presence et streaming ...Annexes du Document sur l'Auto provisioning, contacts, presence et streaming ...
Annexes du Document sur l'Auto provisioning, contacts, presence et streaming ...Emeric Kamleu Noumi
 
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
 
Bases de PHP - Partie 1
Bases de PHP - Partie 1Bases de PHP - Partie 1
Bases de PHP - Partie 1Régis Lutter
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantHugo Hamon
 
Top 10 chausse trappes
Top 10 chausse trappesTop 10 chausse trappes
Top 10 chausse trappesDamien Seguy
 
Initiation au code : Ateliers en C# (applications desktop et mobile native)
Initiation au code : Ateliers en C# (applications desktop et mobile native)Initiation au code : Ateliers en C# (applications desktop et mobile native)
Initiation au code : Ateliers en C# (applications desktop et mobile native)Stéphanie Hertrich
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniShellmates
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovyguest6e3bed
 
JavaScript prise en main et fondamentaux
JavaScript prise en main et fondamentauxJavaScript prise en main et fondamentaux
JavaScript prise en main et fondamentauxVincent Petetin
 

Was ist angesagt? (18)

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 et Symfony 3
PHP 7 et Symfony 3PHP 7 et Symfony 3
PHP 7 et Symfony 3
 
La référence Clear php
La référence Clear phpLa référence Clear php
La référence Clear php
 
La première partie de la présentation PHP
La première partie de la présentation PHPLa première partie de la présentation PHP
La première partie de la présentation PHP
 
Nouveautés php 7
Nouveautés php 7Nouveautés php 7
Nouveautés php 7
 
Annexes du Document sur l'Auto provisioning, contacts, presence et streaming ...
Annexes du Document sur l'Auto provisioning, contacts, presence et streaming ...Annexes du Document sur l'Auto provisioning, contacts, presence et streaming ...
Annexes du Document sur l'Auto provisioning, contacts, presence et streaming ...
 
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
 
Php cours
Php coursPhp cours
Php cours
 
Bases de PHP - Partie 1
Bases de PHP - Partie 1Bases de PHP - Partie 1
Bases de PHP - Partie 1
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
Top 10 chausse trappes
Top 10 chausse trappesTop 10 chausse trappes
Top 10 chausse trappes
 
Formation python
Formation pythonFormation python
Formation python
 
Formation python
Formation pythonFormation python
Formation python
 
Initiation au code : Ateliers en C# (applications desktop et mobile native)
Initiation au code : Ateliers en C# (applications desktop et mobile native)Initiation au code : Ateliers en C# (applications desktop et mobile native)
Initiation au code : Ateliers en C# (applications desktop et mobile native)
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
 
Présentation Groovy
Présentation GroovyPrésentation Groovy
Présentation Groovy
 
Php 5.3
Php 5.3Php 5.3
Php 5.3
 
JavaScript prise en main et fondamentaux
JavaScript prise en main et fondamentauxJavaScript prise en main et fondamentaux
JavaScript prise en main et fondamentaux
 

Andere mochten auch

Comment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguerComment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguerDamien Seguy
 
Review unknown code with static analysis - bredaphp
Review unknown code with static analysis - bredaphpReview unknown code with static analysis - bredaphp
Review unknown code with static analysis - bredaphpDamien Seguy
 
硬件体系架构浅析
硬件体系架构浅析硬件体系架构浅析
硬件体系架构浅析frogd
 
Google Analytics Implementation Checklist
Google Analytics Implementation ChecklistGoogle Analytics Implementation Checklist
Google Analytics Implementation ChecklistPadiCode
 
Php 7.2 compliance workshop php benelux
Php 7.2 compliance workshop php beneluxPhp 7.2 compliance workshop php benelux
Php 7.2 compliance workshop php beneluxDamien Seguy
 
Hunt for dead code
Hunt for dead codeHunt for dead code
Hunt for dead codeDamien Seguy
 
php & performance
 php & performance php & performance
php & performancesimon8410
 
Php in the graph (Gremlin 3)
Php in the graph (Gremlin 3)Php in the graph (Gremlin 3)
Php in the graph (Gremlin 3)Damien Seguy
 
Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析frogd
 
Static analysis saved my code tonight
Static analysis saved my code tonightStatic analysis saved my code tonight
Static analysis saved my code tonightDamien Seguy
 
Google Analytics Campaign Tracking Fundamentals
Google Analytics Campaign Tracking FundamentalsGoogle Analytics Campaign Tracking Fundamentals
Google Analytics Campaign Tracking FundamentalsKayden Kelly
 
網站部署與第三方服務整合
網站部署與第三方服務整合網站部署與第三方服務整合
網站部署與第三方服務整合Shengyou Fan
 
當六脈神劍遇上 PhpStorm
當六脈神劍遇上 PhpStorm當六脈神劍遇上 PhpStorm
當六脈神劍遇上 PhpStormOomusou Xiao
 
Introduction to Google Analytics
Introduction to Google AnalyticsIntroduction to Google Analytics
Introduction to Google AnalyticsArjun Parekh
 
[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南Shengyou Fan
 
Composer 從入門到實戰
Composer 從入門到實戰Composer 從入門到實戰
Composer 從入門到實戰Shengyou Fan
 

Andere mochten auch (20)

Comment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguerComment relire du code pourri sans se fatiguer
Comment relire du code pourri sans se fatiguer
 
PHP 7 new engine
PHP 7 new enginePHP 7 new engine
PHP 7 new engine
 
Review unknown code with static analysis - bredaphp
Review unknown code with static analysis - bredaphpReview unknown code with static analysis - bredaphp
Review unknown code with static analysis - bredaphp
 
Php performance-talk
Php performance-talkPhp performance-talk
Php performance-talk
 
Design patterns in PHP
Design patterns in PHPDesign patterns in PHP
Design patterns in PHP
 
What's new with PHP7
What's new with PHP7What's new with PHP7
What's new with PHP7
 
硬件体系架构浅析
硬件体系架构浅析硬件体系架构浅析
硬件体系架构浅析
 
Google Analytics Implementation Checklist
Google Analytics Implementation ChecklistGoogle Analytics Implementation Checklist
Google Analytics Implementation Checklist
 
Php 7.2 compliance workshop php benelux
Php 7.2 compliance workshop php beneluxPhp 7.2 compliance workshop php benelux
Php 7.2 compliance workshop php benelux
 
Hunt for dead code
Hunt for dead codeHunt for dead code
Hunt for dead code
 
php & performance
 php & performance php & performance
php & performance
 
Php in the graph (Gremlin 3)
Php in the graph (Gremlin 3)Php in the graph (Gremlin 3)
Php in the graph (Gremlin 3)
 
Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析Oracle rac资源管理算法与cache fusion实现浅析
Oracle rac资源管理算法与cache fusion实现浅析
 
Static analysis saved my code tonight
Static analysis saved my code tonightStatic analysis saved my code tonight
Static analysis saved my code tonight
 
Google Analytics Campaign Tracking Fundamentals
Google Analytics Campaign Tracking FundamentalsGoogle Analytics Campaign Tracking Fundamentals
Google Analytics Campaign Tracking Fundamentals
 
網站部署與第三方服務整合
網站部署與第三方服務整合網站部署與第三方服務整合
網站部署與第三方服務整合
 
當六脈神劍遇上 PhpStorm
當六脈神劍遇上 PhpStorm當六脈神劍遇上 PhpStorm
當六脈神劍遇上 PhpStorm
 
Introduction to Google Analytics
Introduction to Google AnalyticsIntroduction to Google Analytics
Introduction to Google Analytics
 
[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南[Community Open Camp] 給 PHP 開發者的 VS Code 指南
[Community Open Camp] 給 PHP 開發者的 VS Code 指南
 
Composer 從入門到實戰
Composer 從入門到實戰Composer 從入門到實戰
Composer 從入門到實戰
 

Ähnlich wie 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.4Damien Seguy
 
Migration PHP4-PHP5
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5julien pauli
 
Formation PHP
Formation PHPFormation PHP
Formation PHPkemenaran
 
Doit on encore faire du php en 2017
Doit on encore faire du php en 2017Doit on encore faire du php en 2017
Doit on encore faire du php en 2017Frederic Bouchery
 
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
 
Communications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPCommunications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPjulien pauli
 
Cours php -partie 1.pdf
Cours php -partie 1.pdfCours php -partie 1.pdf
Cours php -partie 1.pdfssuserc46a93
 
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
 
C1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partieC1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partieLoic Yon
 
Developpement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdfDeveloppement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdfrachidimstapha
 
seance4-1 php.ppt
seance4-1 php.pptseance4-1 php.ppt
seance4-1 php.pptAmineReal
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHPjulien pauli
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP NextSQLI
 

Ähnlich wie A la recherche du code mort (20)

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
 
PHP.pptx
PHP.pptxPHP.pptx
PHP.pptx
 
Migration PHP4-PHP5
Migration PHP4-PHP5Migration PHP4-PHP5
Migration PHP4-PHP5
 
Formation PHP
Formation PHPFormation PHP
Formation PHP
 
Syntaxe du langage PHP
Syntaxe du langage PHPSyntaxe du langage PHP
Syntaxe du langage PHP
 
Doit on encore faire du php en 2017
Doit on encore faire du php en 2017Doit on encore faire du php en 2017
Doit on encore faire du php en 2017
 
Cryptographie 101 Pour les programmeurs (PHP)
Cryptographie 101 Pour les programmeurs (PHP)Cryptographie 101 Pour les programmeurs (PHP)
Cryptographie 101 Pour les programmeurs (PHP)
 
Php seance1
Php seance1Php seance1
Php seance1
 
Communications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPCommunications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHP
 
Cours php -partie 1.pdf
Cours php -partie 1.pdfCours php -partie 1.pdf
Cours php -partie 1.pdf
 
Les principes de base de PHP
 Les principes de base de PHP  Les principes de base de PHP
Les principes de base de PHP
 
PHP5: Endgame
PHP5: EndgamePHP5: Endgame
PHP5: Endgame
 
test doc
test doctest doc
test doc
 
C1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partieC1 - Langage C - ISIMA - Première partie
C1 - Langage C - ISIMA - Première partie
 
Ruby Pour RoR
Ruby Pour RoRRuby Pour RoR
Ruby Pour RoR
 
Developpement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdfDeveloppement web dynamique_Base de donnees.pdf
Developpement web dynamique_Base de donnees.pdf
 
seance4-1 php.ppt
seance4-1 php.pptseance4-1 php.ppt
seance4-1 php.ppt
 
Patterns and OOP in PHP
Patterns and OOP in PHPPatterns and OOP in PHP
Patterns and OOP in PHP
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
 
PHP 5.3, PHP Next
PHP 5.3, PHP NextPHP 5.3, PHP Next
PHP 5.3, PHP Next
 

Mehr von 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
 

Mehr von 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
 

A la recherche du code mort