Hallo liebe Kollegen,

I möchte mit euch ein bisschen Erfahrung teilen. Ich habe einen Statischen Analysator für PHP phpstan installiert. Ich finde es klasse und ich denke das Tool kann uns helfen weniger Bugs zu programmieren.

1. Installieren
composer global require "phpstan/phpstan"
oder mit Docker
docker pull phpstan/phpstan

2. Starten
phpstan analyze -l max -a ./tests/Bootstrap.php modules/xhotels/classes/Provider/DTS/Reader
oder als Container
docker run --rm -v `pwd`:/app phpstan/phpstan analyse -l 5 -a tests/Bootstrap.php modules/xhotels/classes/Provider/DTS/Reader/Prices.php

Die -l Option kann ein Analyse Level setzen (1-7|max). Mit der Option -a definiert man eine (oder mehrere) Bootrstrap Datei, diese für Tests passt gut.

Ich habe gemerkt, dass diese Versionen unterschiedliche Probleme finden. Vielleicht liegt es an der Version.

3. Beispiel Ausgabe

 ------ -----------------------------------------------------------------
  Line   Reader/Prices.php                                               
 ------ -----------------------------------------------------------------
  208    Variable $allowed in isset() always exists and is not nullable. 
 ------ -----------------------------------------------------------------
 [ERROR] Found 1 error                                                                                                 

Phpstan hat die Annotations analysiert und festgestellt, dass im Code if (!isset($allowed)) $allowed immer ein String ist und daher ist die Bedingung immer True. Das ist ein Bug.

Noch Beispiel:
 ------ --------------------------------------------------------------------------------------
  Line   RatePlan.php                                                                         
 ------ --------------------------------------------------------------------------------------
  169    Strict comparison using !== between false and int|null will always evaluate to true. 

Die Funktion gibt int|null zurück, es wird aber geprüft ob das Ergebnis nicht False ist. Das ist auch ein Bug.

Sehr viel wird gemeldet, wenn man in Annotations kein Parameter Typ angegeben hat. Es nervt ein bisschen, aber ist einfach zu fixen und im Endeffekt kann das Tool damit besser den Code analysieren und sicherer Bugs finden.

Probiert es aus!

VG
Viktoras

-- 
Mit freundlichen Grüßen
 
Viktoras Bezaras
 - Entwickler -
________________________________________________________
TraSo GmbH
 
Nonnenstraße 42
D-04229 Leipzig
Tel.: +49 341 355 740 44
 
E-Mail: v.bezaras@traso.de
Internet: http://www.traso.de
 
________________________________________________________
Geschäftsführer: Haiko Gerdes
Handelsregister: Amtsgericht Leipzig, HRB 21850