Le code meurt lorsqu'il n'est jamais exécuté, ou qu'il n'est jamais utilisé pour la production finale. Le code meurt tout au long des projects à long terme, et grandit de jour en jour. C'est une partie significative de la dette technique, qui conduit à des pertes de temps, de compréhension. C'est aussi le code le mieux maintenu du dépôt.
Il prend différentes forme, tels que le code inaccessible, les fonctions inutilisées, les conditions redondantes. Il faut alors le repérer, puis identifier tous les usages et les impacts qu'il a avant de le retirer sans provoquer d'erreur spectaculaire. Les outils d'analyse statique sont alors une aide précieuse pour fouiller le code de manière systématique.
Présentation effectuée au Meetup Programmez (08 septembre 2020)par Christophe Villeneuve sur "Etes-vous prêt pour PHP 8 ?".
Vous allez voir l'avancement du langage PHP, les nouveautés, les améliorations
Introduction au langage de programmation PHP.
Présentation réalisée la première fois le lundi 10 mars 2014 à l'IIM : Institut de l'Internet et du Multimédia pour les années préparatoires.
Cette présentation a pour but d'initier les élèves à l'apprentissage de PHP : comprendre sa logique, expliquer les bases de ce langage, sa syntaxe et dans quels cas il peut être utilisé.
Après présentation orale de ces slides, des exercices de mise en pratique ont été réalisés en Atelier avec les élèves.
Voici le plan de la présentation :
• Php, Le principe
• Les basiques
- Les variables
- Afficher un élément
• Les indispensables
- Les conditions
- Les boucles
- Les tableaux
• Les utiles
- Les fonctions
- GET & POST
- Include
Présentation en détail de l'analyse statique : ses fondements en PHP, ses mécanismes internes, les processus d'augmentation des connaissances et de personnalisation des analyses, ainsi que les résultats d'audits.
Présentation effectuée au Meetup Programmez (08 septembre 2020)par Christophe Villeneuve sur "Etes-vous prêt pour PHP 8 ?".
Vous allez voir l'avancement du langage PHP, les nouveautés, les améliorations
Introduction au langage de programmation PHP.
Présentation réalisée la première fois le lundi 10 mars 2014 à l'IIM : Institut de l'Internet et du Multimédia pour les années préparatoires.
Cette présentation a pour but d'initier les élèves à l'apprentissage de PHP : comprendre sa logique, expliquer les bases de ce langage, sa syntaxe et dans quels cas il peut être utilisé.
Après présentation orale de ces slides, des exercices de mise en pratique ont été réalisés en Atelier avec les élèves.
Voici le plan de la présentation :
• Php, Le principe
• Les basiques
- Les variables
- Afficher un élément
• Les indispensables
- Les conditions
- Les boucles
- Les tableaux
• Les utiles
- Les fonctions
- GET & POST
- Include
Présentation en détail de l'analyse statique : ses fondements en PHP, ses mécanismes internes, les processus d'augmentation des connaissances et de personnalisation des analyses, ainsi que les résultats d'audits.
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEMarouan OMEZZINE
Une introduction / ébauche au langage PHP (intro, xampp, premier pas, les structures, les variables, les types, les fonctions ...) faite dans le cadre des formations inter-membres du club Junior ENSI (http://www.junior-ensi.org/) de l'école nationale des sciences de l'informatique (http://www.ensi.rnu.tn/).
Clear PHP est la référence de programmation PHP pour tous. Elle rassemble la plus grande list de recommendations pour écrire du code clair, éviter les erreurs classiques, prévenir le code mort et préparer les prochaines versions de la plate-forme. Ces recommendations se concentrent sur PHP, et se situent entre les conventions d'écriture et la conception logicielle. C'est la première fois qu'une telle référence a été compilée, pour permettre à tous de bâtir son propre référentiel de programmation en PHP.
Conférence d'ouverture du deuxième webday de l'esgi.
Présentation des nouveautés de PHP7, l'état du support des versions de PHP, les incompatibilités (backwards compatibility breaks), les nouvelles fonctionnalités, et les moyens pour tester son application dès maintenant.
PHP : (Hypertext Preprocessor") est un langage de scripts:
Coté serveur,
Open Source,
et spécialement conçu pour le développement d'applications web.
Il peut être intégré facilement au HTML.
Cours de PHP/MySQL pour l'IEF (Institut Européen de Formation)
Première partie des cours de développement PHP :
- Environnement de développement
- Hello world !
- Syntaxe PHP
- PHP et HTML
- Instructions PHP
- Les variables
- Déclaration des variables
- Variables locales
- Variables globales
- Tester l'existence d'une variable
- Détruire une variable
- Variables dynamiques
- Constantes
- Types de données
- Trouver le type d'une variable
- Booléens (Boolean)
- Entiers (Integer)
- Nombres flottants (Float)
- Chaînes de caractères (String)
- Les Cast
- Conversion de valeurs
- Opérateurs
- Opérateurs d'affectation
- Opérateurs d'arithmétiques
- Incrémentation/Décrémentation
- Opérateurs combinés
- Concaténation
- Opérateurs de comparaison
- Opérateurs logiques
- Priorités des opérateurs
- Conditions (if et switch)
Symfony2 - Un Framework PHP 5 PerformantHugo Hamon
L’arrivée de PHP 5.3 en milieu d’année 2009 a bouleversé la manière de développer des applications web. En effet, cette nouvelle version a apporté de nouveaux outils au langage tels que les espaces de nommage qui favorisent la réutilisabilité du code lorsqu’ils sont employés à bon escient. Les nouveaux frameworks de développement rapide ont aussi suivi le mouvement et reposent sur la base de PHP 5.3. C’est le cas de Symfony2 dont la version stable est prévue prochainement.
Cette présentation offre un tour d’horizon de la nouvelle architecture du framework qui s’articule autour de “bundles”, de librairies externes et de nombreux composants indépendants tels que le conteneur d’injection de dépendances. Nous dresserons un panorama des principales fonctionnalités offertes par le framework telles que la couche d’ORM Doctrine 2, le moteur de templating Twig et la gestion des formulaires. Nous nous intéresserons également à la gestion du cache HTTP, à la couche de sécurité ainsi qu’aux outils de débogage destinés à améliorer la productivité du développeur et la maintenance de l’application.
PHP a son lot de surprises qui pimente notre vie de développeur : le code qui meurt d’un coup de namespace, strpos qui ne trouve pas sa chaîne et les tableaux qui se modifient sans qu’on y touche. Ca vous énerve vous aussi ? Alors, en 20 minutes, on va dresser un florilège des erreurs les plus vicieuses, comment les corriger et comment les garder loin de votre code. Attachez vos ceintures !
Initiation au code : Ateliers en C# (applications desktop et mobile native)Stéphanie Hertrich
Coding - Initiation au code pour les vrais débutants
--- Apprenez les bases de l'algorithmie. Mettez-les en pratique pour créer votre première application de bureau, puis des applications mobiles natives pour Windows Phone ---
À destination de vrais débutants qui n’ont jamais tapé une ligne de code, ces cours vous permettront de comprendre les bases d’algorithmie et découvrir en pratique ce qu’est le code avec des exemples simples et amusants.
Le but n’est pas de faire de vous des développeurs mais de vous donner un niveau qui vous permette de suivre des formations pour développeurs débutants.
Les concepts enseignés sont valables pour tous les langages mais en pratique nous utiliserons le langage C# avec l’environnement de développement Visual Studio 2013.
Cet atelier a été conçu dans le cadre d'une initiative menée conjointement par Girls in Tech Paris et Microsoft France.
Le programme et les explications ici : http://gitparis.com/2013/12/02/cours-de-coding-les-inscriptions-sont-ouvertes-voila-le-programme/
Les slides correspondent aux 3 premiers ateliers (7 cours de 3 heures).
Comment relire du code pourri sans se fatiguerDamien Seguy
Pour assurer une revue continue du code PHP, il faut deux outils : une référence de programmation, avec des recommendations claires et adaptées. Celle-ci peut se constituer aisément à partir des recommandations du manuel officiel, des bonnes pratiques et des traditions PHP. L'autre outil est un auditeur statique, qui repasse chaque ligne au peigne fin et traque inlassablement ce qui doit être amélioré. Nous verrons comment ils fonctionnent ensemble, et jusqu'où ils peuvent mener votre code sur le chemin de la qualité.
Review unknown code with static analysis - bredaphpDamien Seguy
Code quality is not just for christmas, it is a daily part of the job. So, what do you do when you're handed with a five feet long pole a million lines of code that must be vetted ? You call static analysis to the rescue. During one hour, we'll be reviewing totally unknown code code : no name, no usage, not a clue. We'll apply a wide range of tools, reaching for anything that helps us understand the code and form an opinion on it. Can we break this mystery and learn how everyone else is looking at our code ?
Introduction au langage PHP (1ere partie) élaborée par Marouan OMEZZINEMarouan OMEZZINE
Une introduction / ébauche au langage PHP (intro, xampp, premier pas, les structures, les variables, les types, les fonctions ...) faite dans le cadre des formations inter-membres du club Junior ENSI (http://www.junior-ensi.org/) de l'école nationale des sciences de l'informatique (http://www.ensi.rnu.tn/).
Clear PHP est la référence de programmation PHP pour tous. Elle rassemble la plus grande list de recommendations pour écrire du code clair, éviter les erreurs classiques, prévenir le code mort et préparer les prochaines versions de la plate-forme. Ces recommendations se concentrent sur PHP, et se situent entre les conventions d'écriture et la conception logicielle. C'est la première fois qu'une telle référence a été compilée, pour permettre à tous de bâtir son propre référentiel de programmation en PHP.
Conférence d'ouverture du deuxième webday de l'esgi.
Présentation des nouveautés de PHP7, l'état du support des versions de PHP, les incompatibilités (backwards compatibility breaks), les nouvelles fonctionnalités, et les moyens pour tester son application dès maintenant.
PHP : (Hypertext Preprocessor") est un langage de scripts:
Coté serveur,
Open Source,
et spécialement conçu pour le développement d'applications web.
Il peut être intégré facilement au HTML.
Cours de PHP/MySQL pour l'IEF (Institut Européen de Formation)
Première partie des cours de développement PHP :
- Environnement de développement
- Hello world !
- Syntaxe PHP
- PHP et HTML
- Instructions PHP
- Les variables
- Déclaration des variables
- Variables locales
- Variables globales
- Tester l'existence d'une variable
- Détruire une variable
- Variables dynamiques
- Constantes
- Types de données
- Trouver le type d'une variable
- Booléens (Boolean)
- Entiers (Integer)
- Nombres flottants (Float)
- Chaînes de caractères (String)
- Les Cast
- Conversion de valeurs
- Opérateurs
- Opérateurs d'affectation
- Opérateurs d'arithmétiques
- Incrémentation/Décrémentation
- Opérateurs combinés
- Concaténation
- Opérateurs de comparaison
- Opérateurs logiques
- Priorités des opérateurs
- Conditions (if et switch)
Symfony2 - Un Framework PHP 5 PerformantHugo Hamon
L’arrivée de PHP 5.3 en milieu d’année 2009 a bouleversé la manière de développer des applications web. En effet, cette nouvelle version a apporté de nouveaux outils au langage tels que les espaces de nommage qui favorisent la réutilisabilité du code lorsqu’ils sont employés à bon escient. Les nouveaux frameworks de développement rapide ont aussi suivi le mouvement et reposent sur la base de PHP 5.3. C’est le cas de Symfony2 dont la version stable est prévue prochainement.
Cette présentation offre un tour d’horizon de la nouvelle architecture du framework qui s’articule autour de “bundles”, de librairies externes et de nombreux composants indépendants tels que le conteneur d’injection de dépendances. Nous dresserons un panorama des principales fonctionnalités offertes par le framework telles que la couche d’ORM Doctrine 2, le moteur de templating Twig et la gestion des formulaires. Nous nous intéresserons également à la gestion du cache HTTP, à la couche de sécurité ainsi qu’aux outils de débogage destinés à améliorer la productivité du développeur et la maintenance de l’application.
PHP a son lot de surprises qui pimente notre vie de développeur : le code qui meurt d’un coup de namespace, strpos qui ne trouve pas sa chaîne et les tableaux qui se modifient sans qu’on y touche. Ca vous énerve vous aussi ? Alors, en 20 minutes, on va dresser un florilège des erreurs les plus vicieuses, comment les corriger et comment les garder loin de votre code. Attachez vos ceintures !
Initiation au code : Ateliers en C# (applications desktop et mobile native)Stéphanie Hertrich
Coding - Initiation au code pour les vrais débutants
--- Apprenez les bases de l'algorithmie. Mettez-les en pratique pour créer votre première application de bureau, puis des applications mobiles natives pour Windows Phone ---
À destination de vrais débutants qui n’ont jamais tapé une ligne de code, ces cours vous permettront de comprendre les bases d’algorithmie et découvrir en pratique ce qu’est le code avec des exemples simples et amusants.
Le but n’est pas de faire de vous des développeurs mais de vous donner un niveau qui vous permette de suivre des formations pour développeurs débutants.
Les concepts enseignés sont valables pour tous les langages mais en pratique nous utiliserons le langage C# avec l’environnement de développement Visual Studio 2013.
Cet atelier a été conçu dans le cadre d'une initiative menée conjointement par Girls in Tech Paris et Microsoft France.
Le programme et les explications ici : http://gitparis.com/2013/12/02/cours-de-coding-les-inscriptions-sont-ouvertes-voila-le-programme/
Les slides correspondent aux 3 premiers ateliers (7 cours de 3 heures).
Comment relire du code pourri sans se fatiguerDamien Seguy
Pour assurer une revue continue du code PHP, il faut deux outils : une référence de programmation, avec des recommendations claires et adaptées. Celle-ci peut se constituer aisément à partir des recommandations du manuel officiel, des bonnes pratiques et des traditions PHP. L'autre outil est un auditeur statique, qui repasse chaque ligne au peigne fin et traque inlassablement ce qui doit être amélioré. Nous verrons comment ils fonctionnent ensemble, et jusqu'où ils peuvent mener votre code sur le chemin de la qualité.
Review unknown code with static analysis - bredaphpDamien Seguy
Code quality is not just for christmas, it is a daily part of the job. So, what do you do when you're handed with a five feet long pole a million lines of code that must be vetted ? You call static analysis to the rescue. During one hour, we'll be reviewing totally unknown code code : no name, no usage, not a clue. We'll apply a wide range of tools, reaching for anything that helps us understand the code and form an opinion on it. Can we break this mystery and learn how everyone else is looking at our code ?
PHP7 brings a tremendous number of new features. Tonight, we will take a look at the null coalesce operator, new execution order (uniform variable syntax), new exceptions and more.
When migrating, we often need to review old code and target only interesting issues. This session will connect the backward incompatibilities and new features to actual location in the code, relying on static analysis to process a large code base quickly. Based on the accumulated experience of the tools, we will review the issues, diagnose criticality, select the best fixes, and prioritize tasks. All tools used will be open source, and you can try them at home for more validation.
Dead code happens when it can never be executed, or if it has no effect on the output. Dead code tends to appear in long-winded projects, and grows over time. It is a significant part of the technical debt, leading to lost time in understanding code, fixing it (sic) and ultimately, removing it. It takes various shapes, such as unreachable code, unused functions, redundant conditions. It may also be conditional, depending on environnement, even if the latter doesn't exist anymore. During the session, we'll track dead code, discuss how it may be removed or sidelined. We'll feel a lot cleaner and leaner afterward.
Graph databases come with enhanced connectivity of data and whiteboard friendly paradigm. It requires learning a new Graph Traversal Language, that crawls the network and brings informations. It's indeed a fresh new look at how we store web of data and search for it. We'll meet gremlin, from Apache TinkerPop, which provides an abstract layer that make it easy to express your business logic without fighting with the code, and several Open Source graph databases, available for testing and toying.
Static analysis tools checks PHP code without running them. Fully automated, they bring expertise to review the code, enforce good practices when programming, keep code ready for the next PHP version. PHP 7 has developed tremendously our capacity to audit code - thanks to AST and return types, it is possible to go deeper and prevent more bugs. During this session, we'll review the current state of static analysis tools, learn what they can find for us, and how to integrate it in the development cycle - security bugs, migration incompatibilities, directives recommendations. Simply said, better PHP coding.
Google Analytics Campaign Tracking FundamentalsKayden Kelly
Complete Guide to Google Analytics Campaign Tracking from GAUGE conference 2012 in San Francisco that covers:
1) Campaign Tracking Overview
2) Tag Specifications
3) Troubleshooting
+BONUS Email Campaign Analysis Tips
This presentation covers methods to set up Google Analytics on your website. It also includes basic terminologies / jargons / concepts that are used throughout Google Analytics
Déjà, PHP 7.4 toque à la porte, et il arrive les bras chargés de fonctionnalités et de modernisations. Que ce soit les FFI, le support du typage pour les propriétés, l’abandon des nombres real, la covariance, et même la modernisation de strip_tags, array_merge sans argument, et l’imbrication d’opérateurs ternaires : ouf, il va falloir se retrousser les manches. Durant la session, nous passerons en revue les nouvelles fonctionnalités, les incompatibilités, et nous verrons comment préparer son code dès maintenant.
La cryptographie n’est pas facile à comprendre, et encore moins à l’implanter.
De la cryptographie asymétrique et symétrique à un bon hachage pour les mots de passe, cette présentation est une introduction complète à la cryptographie par définition, historique, des exemples (PHP) et la mise en œuvre.
Version pour PHP Québec
Qu'est ce que PHP ? Dans ce diaporama, vous allez découvrir les principes de base de PHP dans une courte introduction et apprendre à créer vous aussi des sites web dynamiques.
Pour plus de tuto: https://www.funinformatique.com/comment-pirater-un-compte-facebook/
C'est maintenant la fin pour PHP5 ! Mais connaissez vous vraiment tous ce qu'a apporté cette version ? Et maintenant, quoi de neuf en PHP7 ... et après, vers PHP8 ?
Developpement web dynamique_Base de donnees.pdfrachidimstapha
MySQL has stand-alone clients that allow users to interact directly with a MySQL database using SQL, but more often, MySQL is used with other programs to implement applications that need relational database capability. MySQL is a component of the LAMP web application software stack (and others)
https://uii.io/3rFjIWMA0d
https://uii.io/3rFjIWMA0d
Lors de cette présentation vous trouverez la liste complète des nouveautés de PHP 5.3 avec des exemples d'implémentation.
Elle comprend aussi une partie introspective sur le futur de PHP au 30 juin 2010
There are tactical reasons to adopt strong typehint: easy validation, less code, fashionable. Besides, the first typehints blend in effortlessly with the current application: it is as if typehint was already there. Later, it appears that scalar types paved the way to more substantial code refactoring. Classes emerge from the initial scalar types, code congregate around important values, types gets more complex. Finally, systemic typehint arrives. Type hints become systemic when they help tame the class dependency hell, and help us plan for the new code. During the session, we'll cover the various stages of using typehints, with their advantages, and when not to overuse them.
Strong typing : adoption, adaptation and organisationDamien Seguy
There are tactical reasons to adopt strong typehint: easy validation, less code, fashionable. Besides, the first typehints blend in effortlessly with the current application: it is as if typehint was already there. Later, it appears that scalar types paved the way to more substantial code refactoring. Classes emerge from the initial scalar types, code congregate around important values, types gets more complex. Finally, systemic typehint arrives. Type hints become systemic when they help tame the class dependency hell, and help us plan for the new code. During the session, we’ll cover the various stages of using typehints, with their advantages, and when not to overuse them.
Qui a laissé son mot de passe dans le codeDamien Seguy
Qui, de nos jours, laisse encore son mot de passe dans le code? Pour quelles raisons? Et comment éviter de voir ses secrets atterrir en production, ou dans un dépot public? en utilisant Exakat et git-secrets.
Revue de parcours des pièges les plus classiques en PHP, entre les références qui pendouillent, les opérateurs et leur précédence, array_merge() en boucle, ou encore les fonctionnalités natives oubliées et les améliorations de PHP 8.0.
PHP has its own treasure chest of classic mistakes that surprises even the most seasoned expert : code that dies just by changing its namespace, strpos() that fails to find strings or arrays that changes without touching them.
Do that get on your nerves too ? Let’s make a list of them, so we can always teach them to the new guys, spot them during code reviews and kick them out of our code once and for all. Come on, you’re not frightening us !
Meilleur du typage fort (AFUP Day, 2020)Damien Seguy
Le typage se propage à tout PHP : la 7.4 l’ajoute aux propriétés, après les arguments et les valeurs de retours. Bien qu’opposé aux choix initiaux de typage faible de PHP, le typage augmente significativement la cohérence du code, son niveau d’auto-validation et les possibilités de dépendances inextricables. Le typage contribue à aider les outils d’introspection, à débuguer le code au plus tôt, et à adopter des techniques de développement comme le motif de l’objet null. C’est un outil supplémentaire, pratique pour les grands projets, et facilement déployé.
https://event.afup.org/afup-day-2020/afup-day-2020-tours/programme/#3246
PHP has its own treasure chest of classic mistakes that surprises even the most seasoned expert : code that dies just by changing its namespace, strpos() that fails to find strings or arrays that changes without touching them. Do that get on your nerves too ? Let’s make a list of them, so we can always teach them to the new guys, spot them during code reviews and kick them out of our code once and for all. Come on, you’re not frightening us !
PHP has its own treasure chest of classic mistakes that surprises even the most seasoned expert: code that dies just by changing its namespace, strpos() that fails to find strings or arrays that changes without touching them. Do that get on your nerves too? Let's make a list of them, so we can always teach them to the new guys, spot them during code reviews and kick them out of our code once and for all. Come on, you're not frightening us!
PHP has its own treasure chest of classic mistakes that surprises even the most seasoned expert : code that dies just by changing its namespace, strpos() that fails to find strings or arrays that changes without touching them. Do that get on your nerves too? Let’s make a list of them, so we can always teach them to the new guys, spot them during code reviews and kick them out of our code once and for all. Come on, you’re not frightening us?
Static analysis is an emerging field, in particular in the PHP world. Reviewing source code at the speed of a computer requires powerful theoretical tools: control flow diagram, abstract syntactic trees, acyclic dependency graph.
If all this seems far and remote from PHP, come and learn how they apply to your favorite language! They are all useful when it comes to detecting early those errors that end up in production, and sometimes, even before the code may compile. We’ll see how to combine all those aspects to build a useful auditing engine.
Static analysis for PHP Static analysis is an emerging field, in particular in the PHP world. Reviewing source code at the speed of a computer requires powerful theoretical tools: control flow diagram, abstract syntactic trees, acyclic dependency graph. If all this seems far and remote from PHP, come and learn how they apply to your favorite language! We'll see how to combine all those aspects to build a useful auditing engine.
Review unknown code with static analysis php ce 2018Damien Seguy
Code quality is not just for christmas, it is a daily part of the job. So, what do you do when you're handed with a five feet long pole a million lines of code that must be vetted ? You call static analysis to the rescue. During one hour, we'll be reviewing totally unknown code code : no name, no usage, not a clue. We'll apply a wide range of tools, reaching for anything that helps us understand the code and form an opinion on it. Can we break this mystery and learn how everyone else is looking at our code ?
PHP 7.3 is already bet3 and we will get the final version shortly after Sinterklaas.
A wide range of new features are already available for testing, including the relaxed syntax for Heredocs, the final comma in function calls, and a crowd of smaller increments.
We’ll review those evolutions, check the incompatibilities, and try to find the in PHP code.
Finally, we’ll present the RFC process that leads to new features : we can start to discover PHP 7.4 together!
PHP 7.3 sera en beta à la fin de l'été, et cible une sortie avant Noel. De nombreuses nouveautés sont prévues de longue date, comme l'évolution de la syntaxe heredoc, ou les , finales pour les appels de fonctions, tandis qu'une rafale de nouveautés se bousculent au portillon, et ont même généré une alpha 4. Nous passerons en revue toutes ces évolutions, ainsi que les incompatibilités, comment les trouver dans du code, et comment fonctionnent les RFC de PHP.
PHP 7.3 sera en beta à la fin de l'été, et cible une sortie avant Noel. De nombreuses nouveautés sont prévues de longue date, comme l'évolution de la syntaxe heredoc, ou les , finales pour les appels de fonctions, tandis qu'une rafale de nouveautés se bousculent au portillon, et ont même
généré une alpha 4. Nous passerons en revue toutes ces évolutions, ainsi que les incompatibilités, comment les trouver dans du code, et comment fonctionnent les RFC de PHP.
Review unknown code with static analysis php ipc 2018Damien Seguy
Code quality is not just for christmas, it is a daily part of the job. So, what do you do when you’re handed with a five feet long pole a million lines of code that must be vetted ? You call static analysis to the rescue. During one hour, we’ll be reviewing totally unknown code code : no name, no usage, not a clue. We’ll apply a wide range of tools, reaching for anything that helps us understand the code and form an opinion on it. Can we break this mystery and learn how everyone else is looking at our code ?
Everyone fear the review of his own code. And to start with, there is no time. Because, what will happen once we have found something to detail ? In fact, a good code review means being ready to discuss a mere few lines, assess the context and evaluate an alternative, or not. It also means that when the code has become a dense jungle, there may hide monsters worse than a few errors. Using automated tools that are not scared by volume, we’ll keep everything under control, without anyone else knowing about it.
Static analysis tools checks PHP code without running them. Fully automated, they bring expertise to review the code, enforce good practices when programming, keep code ready for the next PHP version. PHP 7 has developed tremendously our capacity to audit code. Thanks to AST and return types, it is possible to go deeper and prevent more bugs. During this session, we'll review the current state of static analysis tools, learn what they can find for us, and how to integrate it in the development cycle: security bugs, migration incompatibilities, and directives recommendations. Simply said, better PHP coding.
Machine learning for PHP
Machine learning is teaching the computer how to learn by itself. It is far easier to be done, especially when you have small data set and a good level of expertise in your field. Classifying objects, predicting who will buy, spotting comments in code is achieved with grassy algorithms like neural networks, genetic algorithms or ant herding. PHP is in good position to make use of such teachings, and take advantages of related technologies like fann. By the end of the session, you’ll know where you want to try it.
Review unknown code with static analysis Zend con 2017Damien Seguy
Code quality is not just for Christmas, it is a daily part of the job. So, what do you do when you're handed with a five feet long pole a million lines of code that must be vetted? You call static analysis to the rescue. During one hour, we'll be reviewing totally unknown code: no name, no usage, not a clue. We'll apply a wide range of tools, reaching for anything that helps us understand the code and form an opinion on it. Can we break this mystery and learn how everyone else is looking at our code?
4. 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()
7. Code mort en PHP
❖ Installation de base
❖ 766 fonctions
❖ 92 classes
❖ 1024 constantes
❖ Éviter de compiler
trop d'extensions
❖ Utilisez disable_functions
8. 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
9. 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!
10. Comment rechercher le code mort?
❖ Identifier du code
❖ Rechercher son utilisation et ses impacts
❖ Retirer chacun un par un
❖ Retirer le code mort
11. Trois types de code mort
❖ Code mort classique
❖ Code mort à la mode PHP
❖ Code mort structurel
20. 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;
?>
22. Code mort à la mode
PHP
Quelques squelettes dans les placards
23. 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
24. 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;
}
25. 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
)
26. 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
27. Instanceof
❖ La cible est l'espace
de noms courant
<?php
class MaClass {}
$o = new MaClass();
if ($o instanceof MaClass) {
print "MaClass est trouvéen";
}
?>
28. 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";
}
}
?>
29. 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
}
}
30. 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,
35. 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;
}
?>
36. 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;
}
?>
39. 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;
?>
40. 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;
?>
42. 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();
?>
43. 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;
?>
44. 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
47. ❖ Interfaces, traits puis classes
❖ Commencez avec les positions basses, puis les moins
utilisées
48. 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);
?>
49. 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
?>
50. 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';
?>
51. Comment repérer du code mort
❖ Connaissance du code
❖ lint
❖ Grep / Chercher
❖ Analyse statique
❖ Logs / error_reporting
❖ Tests unitaires
52. 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