{"id":5290,"date":"2022-09-21T12:58:24","date_gmt":"2022-09-21T10:58:24","guid":{"rendered":"https:\/\/www.clickstorm.de\/blog\/?p=5290"},"modified":"2026-02-02T10:11:10","modified_gmt":"2026-02-02T09:11:10","slug":"php-fuer-fortgeschrittene","status":"publish","type":"post","link":"https:\/\/www.clickstorm.de\/blog\/php-fuer-fortgeschrittene\/","title":{"rendered":"PHP f\u00fcr Fortgeschrittene: PHPStan &#038; CS Fixer"},"content":{"rendered":"<p>Als fortgeschrittener bzw. Senior PHP-Entwickler lernt man nie aus. Es gibt immer neue Versionen und neue Werkzeuge, um die Qualit\u00e4t der PHP-Projekte zu steigern und die Arbeit der Entwickler zu erleichtern.<\/p>\n<p>Stellvertretend hierf\u00fcr stelle ich dir in diesem Artikel <strong>PHPStan<\/strong> und den <strong>PHP Coding Standards Fixer<\/strong> vor. Beide Tools lassen sich mit wenig Aufwand installieren und in deine Ver\u00f6ffentlichungsstrategie integrieren.<\/p>\n<p>Die einzige Voraussetzung ist, dass du dich mit PHP bereits auskennst und Begriffe wie <a href=\"https:\/\/www.clickstorm.de\/blog\/composer-installation-verwaltung-typo3\/\">Composer<\/a> dir vertraut sind. Falls du PHP lernen m\u00f6chtest, schau in unserem <a href=\"https:\/\/www.clickstorm.de\/blog\/php-lernen\/\">Artikel<\/a> f\u00fcr den Einstieg in PHP vorbei.<\/p>\n<h2>PHPStan<\/h2>\n<p><a href=\"https:\/\/phpstan.org\/\" target=\"_blank\" rel=\"noopener\">PHPStan<\/a> ist ein Open Source Werkzeug zur statischen Code Analyse. Das bedeutet, du kannst deinen Code testen ohne eigene Tests zu schreiben. Somit gewinnt dein Code an Qualit\u00e4t und du vermeidest Fehler. Probiere es einfach mal <a href=\"https:\/\/phpstan.org\/try\" target=\"_blank\" rel=\"noopener\">online<\/a> aus.<\/p>\n<div id=\"attachment_5294\" style=\"width: 310px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-5294\" class=\"wp-image-5294 size-medium\" src=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2022\/09\/phpstan_logo-300x300.png\" alt=\"Logo von PHPStan (PHP Elefant mit Lupe)\" width=\"300\" height=\"300\" srcset=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2022\/09\/phpstan_logo-300x300.png 300w, https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2022\/09\/phpstan_logo-150x150.png 150w, https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2022\/09\/phpstan_logo.png 600w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><p id=\"caption-attachment-5294\" class=\"wp-caption-text\">Logo PHPStan<\/p><\/div>\n<h3>Installieren und Ausf\u00fchren von PHPStan<\/h3>\n<p>Zum Installieren von PHPStan ben\u00f6tigst du <a href=\"https:\/\/www.clickstorm.de\/blog\/composer-installation-verwaltung-typo3\/\">Composer<\/a>. F\u00fchre folgende Zeile in deiner Konsole aus:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">composer require --dev phpstan\/phpstan<\/pre>\n<p>Nun kannst du deine erste Analyse starten.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">vendor\/bin\/phpstan analyse pfad\/zu\/meinen\/php-dateien<\/pre>\n<p>Die Ausgabe kann dann wie in diesem Video aussehen:<\/p>\n<div class=\"privacy-container js-privacy-msg-video\"><img decoding=\"async\" class=\"privacy-text-image\" src=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/plugins\/clickstorm-embed\/images\/comment-alt-exclamation.svg\" alt=\"Info Icon\"><\/p>\n<p class=\"privacy-text\">Dieses Video wird \u00fcber eine externe Plattform (YouTube) gehostet. Das Laden bedarf der Zustimmung unserer <a class=\"privacy-text-link\" href=\"https:\/\/www.clickstorm.de\/blog\/datenschutz\/\" target=\"_blank\">Datenschutzbestimmungen.<\/a><\/p>\n<p><a class=\"btn btn-primary btn-cookie js-cookie-open-modal\" data-cs-cookie-anchor=\"externalMedia\" href=\"#\">Einstellung vornehmen<\/a><\/div>\n<div class=\"iframe\"><iframe class=\"js-iframe-privacy-video\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen src=\"\" data-src=\"https:\/\/www.youtube-nocookie.com\/embed\/39eih1HYhJs\"><\/iframe><\/div>\n<p>Eventuell bist du schon \u00fcberrascht, was PHPStan hier findet. Dabei waren dies nur die grundlegenden Tests.<\/p>\n<h3>Levels in PHPStan<\/h3>\n<p>PHPStan hat die Regelwerke in verschiedenen Level zusammengefasst. Hast du keine Level explizit angegeben, so l\u00e4uft Level 0.<\/p>\n<p>Derzeit geht PHPStan bis Level 9. Eine aktuelle \u00dcbersicht der Level findest du in der <a href=\"https:\/\/phpstan.org\/user-guide\/rule-levels\" target=\"_blank\" rel=\"noopener\">Dokumentation<\/a>.<\/p>\n<p>W\u00e4hlst du ein h\u00f6heres Level, so sind alle bis dahin automatisch enthalten. Legst du Level 5 fest, so werden auch Level 0 bis 4 \u00fcberpr\u00fcft.<\/p>\n<p>Um ein anderes Level als 0 zu w\u00e4hlen, gibst du dieses als Parameter (-l) an. Mit <em>max<\/em> gibst du maximale Level (9) an.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">vendor\/bin\/phpstan analyse -l 5 pfad\/zu\/meinen\/php-dateien<\/pre>\n<p>Nun werden dir eventuell mehr Fehler angezeigt. Damit du das Level und den Pfad nicht jedes Mal explizit nennen musst, kannst du eine Konfigurationsdatei anlegen.<\/p>\n<h3>phpstan.neon Konfigurationsdatei<\/h3>\n<p>Sobald du eine Konfigurationsdatei angegeben hast, muss in dieser auch ein Level definiert sein. Du kannst den Pfad zur Konfigurationsdatei explizit angeben. Falls nicht, schaut PHPStan nach den folgenden Dateien in deinem aktuellen Arbeitsverzeichnis:<\/p>\n<ul>\n<li>phpstan.neon<\/li>\n<li>phpstan.neon.dist<\/li>\n<li>phpstan.dist.neon<\/li>\n<\/ul>\n<p>Wir legen eine phpstan.neon-Datei an und k\u00f6nnen hier weitere Parameter festlegen sowie weitere Konfigurationsdateien einbinden.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\">includes:\r\n  - Build\/more.neon\r\n\r\nparameters:\r\n  level: 5\r\n  paths:\r\n    - pfad\/zu\/meinen\/php-dateien\r\n    - pfad\/zu\/weiteren\/php-dateien<\/pre>\n<p>Jetzt musst du in der Konsole nichts weiter angeben.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"shell\">vendor\/bin\/phpstan analyse<\/pre>\n<h3>Die PHPStan Baseline<\/h3>\n<p>Gerade am Anfang kann einen die Menge an Fehlern erschlagen. Oder du sagst die Fehler im aktuellen Level sind in Ordnung und du m\u00f6chtest gerne ins n\u00e4chste Level aufsteigen. Um deine aktuelle Codebasis als gegeben festzulegen, kannst du eine <em>Baseline<\/em> erzeugen. Damit wird eine Konfigurationsdatei erzeugt, in welcher festgelegt wird, dass alle aktuellen Fehler zu ignorieren sind.<\/p>\n<p>Damit die Baseline erzeugt wird, musst du lediglich einen Parameter angeben: &#8211;generate-baseline bzw. -b.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">vendor\/bin\/phpstan analyse -b<\/pre>\n<p>Du kannst optional einen Pfad bzw. Dateinamen angeben. Falls nicht, erzeugt PHPStan die Datei phpstan-baseline.neon. Diese Datei kannst du nun in deiner phpstan.neon einbinden.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">includes:\r\n    - phpstan-baseline.neon\r\n\r\nparameters:\r\n    ...\r\n<\/pre>\n<p>Mehr Informationen zu PHPStan findest du in der offiziellen <a href=\"https:\/\/phpstan.org\/user-guide\/getting-started\" target=\"_blank\" rel=\"noopener\">Dokumentation<\/a>. Das folgende Video bringt dir das Tool auch nochmal n\u00e4her:<\/p>\n<div class=\"privacy-container js-privacy-msg-video\"><img decoding=\"async\" class=\"privacy-text-image\" src=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/plugins\/clickstorm-embed\/images\/comment-alt-exclamation.svg\" alt=\"Info Icon\"><\/p>\n<p class=\"privacy-text\">Dieses Video wird \u00fcber eine externe Plattform (YouTube) gehostet. Das Laden bedarf der Zustimmung unserer <a class=\"privacy-text-link\" href=\"https:\/\/www.clickstorm.de\/blog\/datenschutz\/\" target=\"_blank\">Datenschutzbestimmungen.<\/a><\/p>\n<p><a class=\"btn btn-primary btn-cookie js-cookie-open-modal\" data-cs-cookie-anchor=\"externalMedia\" href=\"#\">Einstellung vornehmen<\/a><\/div>\n<div class=\"iframe\"><iframe class=\"js-iframe-privacy-video\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen src=\"\" data-src=\"https:\/\/www.youtube-nocookie.com\/embed\/MnBkkXxkHRo\"><\/iframe><\/div>\n<h3>PHPStan Extensions<\/h3>\n<p>PHPStan kann beliebig erweitert werden. F\u00fcr weitverbreitete Frameworks und Systeme gibt es bereits vorgefertigte Regeln, u.a.:<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/phpstan\/phpstan-symfony\" target=\"_blank\" rel=\"noopener\">Symfony<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/sascha-egerer\/phpstan-typo3\" target=\"_blank\" rel=\"noopener\">TYPO3<\/a><\/li>\n<li><a href=\"https:\/\/github.com\/shyim\/phpstan-shopware\" target=\"_blank\" rel=\"noopener\">Shopware<\/a><\/li>\n<\/ul>\n<h2>PHP Coding Standards Fixer<\/h2>\n<p><a href=\"https:\/\/github.com\/FriendsOfPHP\/PHP-CS-Fixer\" target=\"_blank\" rel=\"noopener\">PHP Coding Standards Fixer<\/a> (kurz: <em>PHP CS Fixer<\/em>) ist ebenfalls ein statisches Analyse-Tool. Der Fokus liegt hier weniger darauf, Fehler zu beheben, sondern die PHP Coding Standards einzuhalten. Das bringt u.a. den Vorteil, dass ihr im Team einheitliche Code-Styles verwendet und einzelne Abweichungen nicht unn\u00f6tig im Git landen.<\/p>\n<h3>Installieren und Ausf\u00fchren von PHP CS Fixer<\/h3>\n<p>Die Installation kann auch wieder \u00fcber Composer erfolgen. Wir schauen uns hier an, wie er f\u00fcr das aktuelle Projekt installiert wird. Dazu f\u00fchre diese Befehle in der Konsole aus.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">mkdir --parents tools\/php-cs-fixer\r\ncomposer require --working-dir=tools\/php-cs-fixer friendsofphp\/php-cs-fixer<\/pre>\n<p>Das Tool kann auch Global und ohne Composer installiert werden. Mehr dazu findest du in der <a href=\"https:\/\/github.com\/FriendsOfPHP\/PHP-CS-Fixer\/blob\/master\/doc\/installation.rst\" target=\"_blank\" rel=\"noopener\">Dokumentation<\/a>.<\/p>\n<p>Zum Ausf\u00fchren kannst du nun folgenden Code ausf\u00fchren.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">tools\/php-cs-fixer\/vendor\/bin\/php-cs-fixer fix pfad\/zu\/meinen\/php-dateien --dry-run --verbose --using-cache no<\/pre>\n<p>Mit den Parametern &#8211;dry-run und &#8211;verbose werden keine \u00c4nderungen an deinem Code vorgenommen und die Regeln angezeigt, welche in den jeweiligen Dateien angewandt werden. Die Ausgabe k\u00f6nnte wie folgt aussehen:<\/p>\n<div class=\"privacy-container js-privacy-msg-video\"><img decoding=\"async\" class=\"privacy-text-image\" src=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/plugins\/clickstorm-embed\/images\/comment-alt-exclamation.svg\" alt=\"Info Icon\"><\/p>\n<p class=\"privacy-text\">Dieses Video wird \u00fcber eine externe Plattform (YouTube) gehostet. Das Laden bedarf der Zustimmung unserer <a class=\"privacy-text-link\" href=\"https:\/\/www.clickstorm.de\/blog\/datenschutz\/\" target=\"_blank\">Datenschutzbestimmungen.<\/a><\/p>\n<p><a class=\"btn btn-primary btn-cookie js-cookie-open-modal\" data-cs-cookie-anchor=\"externalMedia\" href=\"#\">Einstellung vornehmen<\/a><\/div>\n<div class=\"iframe\"><iframe class=\"js-iframe-privacy-video\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen src=\"\" data-src=\"https:\/\/www.youtube-nocookie.com\/embed\/6JyQpE5p7Ss\"><\/iframe><\/div>\n<h3>Regeln f\u00fcr den CS Fixer<\/h3>\n<p>Mit dem Parameter &#8211;rules kannst du Regeln definieren, auf welche gepr\u00fcft werden soll. Wenn du diesen Parameter nicht angibst, werden die <a href=\"https:\/\/www.php-fig.org\/psr\/psr-12\/\" target=\"_blank\" rel=\"noopener\">PSR-12<\/a> Regeln angewandt.<\/p>\n<p>Eine \u00dcbersicht der Regeln findest du <a href=\"https:\/\/cs.symfony.com\/doc\/ruleSets\/PhpCsFixer.html\" target=\"_blank\" rel=\"noopener\">hier<\/a>. F\u00fcr Symfony kannst du beispielsweise <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">--rules=@symnfony<\/code>nutzen.<\/p>\n<p>Dar\u00fcber hinaus kannst du in deinem Projekt eine .php-cs-fixer.php legen. Ist kein rules-Parameter gesetzt, wird diese Datei genutzt.<\/p>\n<p>F\u00fcr TYPO3 nutzt du am besten das <a href=\"https:\/\/packagist.org\/packages\/typo3\/coding-standards\" target=\"_blank\" rel=\"noopener\">Composer Paket<\/a> f\u00fcr die TYPO3 Coding Standards.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">&lt;?php \r\n\r\nreturn (new \\PhpCsFixer\\Config())\r\n    -&gt;setRiskyAllowed(true)\r\n    -&gt;setRules([\r\n        '@DoctrineAnnotation' =&gt; true,\r\n        '@PSR2' =&gt; true,\r\n        'array_syntax' =&gt; ['syntax' =&gt; 'short'],\r\n        'blank_line_after_opening_tag' =&gt; true,\r\n        'braces' =&gt; ['allow_single_line_closure' =&gt; true],\r\n        'cast_spaces' =&gt; ['space' =&gt; 'none'],\r\n        'compact_nullable_typehint' =&gt; true,\r\n        'concat_space' =&gt; ['spacing' =&gt; 'one'],\r\n        'declare_equal_normalize' =&gt; ['space' =&gt; 'none'],\r\n        'dir_constant' =&gt; true,\r\n        'function_to_constant' =&gt; ['functions' =&gt; ['get_called_class', 'get_class', 'get_class_this', 'php_sapi_name', 'phpversion', 'pi']],\r\n        'function_typehint_space' =&gt; true,\r\n        'lowercase_cast' =&gt; true,\r\n        'method_argument_space' =&gt; ['on_multiline' =&gt; 'ensure_fully_multiline'],\r\n        'modernize_strpos' =&gt; true,\r\n        'modernize_types_casting' =&gt; true,\r\n        'native_function_casing' =&gt; true,\r\n        'new_with_braces' =&gt; true,\r\n        'no_alias_functions' =&gt; true,\r\n        'no_blank_lines_after_phpdoc' =&gt; true,\r\n        'no_empty_phpdoc' =&gt; true,\r\n        'no_empty_statement' =&gt; true,\r\n        'no_extra_blank_lines' =&gt; true,\r\n        'no_leading_import_slash' =&gt; true,\r\n        'no_leading_namespace_whitespace' =&gt; true,\r\n        'no_null_property_initialization' =&gt; true,\r\n        'no_short_bool_cast' =&gt; true,\r\n        'no_singleline_whitespace_before_semicolons' =&gt; true,\r\n        'no_superfluous_elseif' =&gt; true,\r\n        'no_trailing_comma_in_singleline_array' =&gt; true,\r\n        'no_unneeded_control_parentheses' =&gt; true,\r\n        'no_unused_imports' =&gt; true,\r\n        'no_useless_else' =&gt; true,\r\n        'no_whitespace_in_blank_line' =&gt; true,\r\n        'ordered_imports' =&gt; true,\r\n        'php_unit_construct' =&gt; ['assertions' =&gt; ['assertEquals', 'assertSame', 'assertNotEquals', 'assertNotSame']],\r\n        'php_unit_mock_short_will_return' =&gt; true,\r\n        'php_unit_test_case_static_method_calls' =&gt; ['call_type' =&gt; 'self'],\r\n        'phpdoc_no_access' =&gt; true,\r\n        'phpdoc_no_empty_return' =&gt; true,\r\n        'phpdoc_no_package' =&gt; true,\r\n        'phpdoc_scalar' =&gt; true,\r\n        'phpdoc_trim' =&gt; true,\r\n        'phpdoc_types' =&gt; true,\r\n        'phpdoc_types_order' =&gt; ['null_adjustment' =&gt; 'always_last', 'sort_algorithm' =&gt; 'none'],\r\n        'return_type_declaration' =&gt; ['space_before' =&gt; 'none'],\r\n        'single_quote' =&gt; true,\r\n        'single_line_comment_style' =&gt; ['comment_types' =&gt; ['hash']],\r\n        'single_trait_insert_per_statement' =&gt; true,\r\n        'trailing_comma_in_multiline' =&gt; ['elements' =&gt; ['arrays']],\r\n        'whitespace_after_comma_in_array' =&gt; true,\r\n        'yoda_style' =&gt; ['equal' =&gt; false, 'identical' =&gt; false, 'less_and_greater' =&gt; false],\r\n    ])\r\n    -&gt;setFinder($finder);<\/pre>\n<h2>Weitere PHP Tools f\u00fcr Fortgeschrittene<\/h2>\n<p>PHPStan und der PHP Code Style Fixer sind l\u00e4ngst nicht alle Tools, welche ein erfahrener PHP-Programmierer kennen sollte.<\/p>\n<h3>PHPUnit &amp; CodeCeption<\/h3>\n<p>Eigene Tests zu schreiben fordert die Stabilit\u00e4t eines Projekts und gibt dem Entwickler Sicherheit. F\u00fcr Unit-Tests empfiehlt sich <a href=\"https:\/\/phpunit.de\/\" target=\"_blank\" rel=\"noopener\">PHP-Unit<\/a>, f\u00fcr gr\u00f6\u00dfere Akzeptanz-Tests <a href=\"https:\/\/codeception.com\/\" target=\"_blank\" rel=\"noopener\">Codeception<\/a>.<\/p>\n<h3>Rector PHP<\/h3>\n<p>Rector PHP bietet software-spezifische CodeAnalysen und kann so u.a. Updates beschleunigen. Hier findest einen Artikel zu <a href=\"https:\/\/www.clickstorm.de\/blog\/rector-php-typo3-upgrades\/\">Rector<\/a> in Verbindung mit TYPO3.<\/p>\n<h3>Continuous Integration und Deployment<\/h3>\n<p>Ein weiteres Feld ist das Thema Continuous Integration und Deployment, also wie du deinen Code ver\u00f6ffentlichst und welche Schritte und Tests dabei absolviert werden. Software die sich hierf\u00fcr anbieten sind <a href=\"https:\/\/deployer.org\/\" target=\"_blank\" rel=\"noopener\">Deployer PHP<\/a> sowie die <a href=\"https:\/\/docs.gitlab.com\/ee\/ci\/\" target=\"_blank\" rel=\"noopener\">GitLab CI<\/a>. Die bisher vorgestellten PHP Tools k\u00f6nnen Teil von deiner Ver\u00f6ffentlichungsstrategie sein.<\/p>\n<h3>Ausblick<\/h3>\n<p>Wenn du ein Werkzeug hier vermisst, dann nenne es gerne in unseren Kommentaren. Was die Helferlein mit deinem PHP-Code anstellen w\u00fcrden, kannst du direkt <a href=\"https:\/\/www.phptools.online\/php-checker\" target=\"_blank\" rel=\"noopener\">online<\/a> testen.<\/p>\n<p>Du willst diese Tools in der Praxis zu nutzen? Dann wirf mal einen Blick auf unsere <a href=\"https:\/\/www.clickstorm.de\/jobs\/php-entwickler\/\" target=\"_blank\" rel=\"noopener\">Stellenangebote<\/a>. Nimm unkompliziert und ohne Lebenslauf Kontakt zu uns auf. Wir freuen uns auf dich.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Erfahre alles zu Tools wie PHPStan und dem PHP Coding Standards Fixer<\/p>\n","protected":false},"author":7,"featured_media":5323,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[135,236,138],"tags":[45,98,19,195,77],"class_list":["post-5290","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cms","category-ecommerce","category-tools","tag-entwicklung","tag-php","tag-technik","tag-testen","tag-tutorial"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>PHP f\u00fcr Fortgeschrittene: PHPStan &amp; CS Fixer - clickstorm Blog<\/title>\n<meta name=\"description\" content=\"Du bist ein fortgeschrittener PHP-Entwickler? Programmiere effizienter mit Tools wie PHPStan und PHP Coding Standards Fixer; erfahre hier wie\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.clickstorm.de\/blog\/php-fuer-fortgeschrittene\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"PHP f\u00fcr Fortgeschrittene: PHPStan &amp; CS Fixer - clickstorm Blog\" \/>\n<meta property=\"og:description\" content=\"Du bist ein fortgeschrittener PHP-Entwickler? Programmiere effizienter mit Tools wie PHPStan und PHP Coding Standards Fixer; erfahre hier wie\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.clickstorm.de\/blog\/php-fuer-fortgeschrittene\/\" \/>\n<meta property=\"og:site_name\" content=\"clickstorm Blog\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/de-de.facebook.com\/clickstorm\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-09-21T10:58:24+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-02T09:11:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2022\/09\/php-fuer-fortgeschrittene-phpstan_teaser-01.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1170\" \/>\n\t<meta property=\"og:image:height\" content=\"577\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Marc\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@clickstorm_gmbh\" \/>\n<meta name=\"twitter:site\" content=\"@clickstorm_gmbh\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Marc\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"6\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/php-fuer-fortgeschrittene\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/php-fuer-fortgeschrittene\\\/\"},\"author\":{\"name\":\"Marc\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#\\\/schema\\\/person\\\/594fb824a2f049d33b2a1b4406bfc86b\"},\"headline\":\"PHP f\u00fcr Fortgeschrittene: PHPStan &#038; CS Fixer\",\"datePublished\":\"2022-09-21T10:58:24+00:00\",\"dateModified\":\"2026-02-02T09:11:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/php-fuer-fortgeschrittene\\\/\"},\"wordCount\":983,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/php-fuer-fortgeschrittene\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/php-fuer-fortgeschrittene-phpstan_teaser-01.jpg\",\"keywords\":[\"Entwicklung\",\"PHP\",\"Technik\",\"Testen\",\"Tutorial\"],\"articleSection\":[\"CMS\",\"eCommerce\",\"Tools\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/php-fuer-fortgeschrittene\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/php-fuer-fortgeschrittene\\\/\",\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/php-fuer-fortgeschrittene\\\/\",\"name\":\"PHP f\u00fcr Fortgeschrittene: PHPStan & CS Fixer - clickstorm Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/php-fuer-fortgeschrittene\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/php-fuer-fortgeschrittene\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/php-fuer-fortgeschrittene-phpstan_teaser-01.jpg\",\"datePublished\":\"2022-09-21T10:58:24+00:00\",\"dateModified\":\"2026-02-02T09:11:10+00:00\",\"description\":\"Du bist ein fortgeschrittener PHP-Entwickler? Programmiere effizienter mit Tools wie PHPStan und PHP Coding Standards Fixer; erfahre hier wie\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/php-fuer-fortgeschrittene\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/php-fuer-fortgeschrittene\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/php-fuer-fortgeschrittene\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/php-fuer-fortgeschrittene-phpstan_teaser-01.jpg\",\"contentUrl\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2022\\\/09\\\/php-fuer-fortgeschrittene-phpstan_teaser-01.jpg\",\"width\":1170,\"height\":577,\"caption\":\"Lehrer zeigt auf Tafel mit PHPStan Logo\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/php-fuer-fortgeschrittene\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"PHP f\u00fcr Fortgeschrittene: PHPStan &#038; CS Fixer\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/\",\"name\":\"clickstorm Blog\",\"description\":\"Neuigkeiten rund um Webentwicklung\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#organization\",\"name\":\"clickstorm GmbH\",\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/11\\\/logo.svg\",\"contentUrl\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/wp-content\\\/uploads\\\/2017\\\/11\\\/logo.svg\",\"caption\":\"clickstorm GmbH\"},\"image\":{\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/de-de.facebook.com\\\/clickstorm\\\/\",\"https:\\\/\\\/x.com\\\/clickstorm_gmbh\",\"https:\\\/\\\/www.youtube.com\\\/channel\\\/UCEaU1eUbug6OiI4uU6vA-cA\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/#\\\/schema\\\/person\\\/594fb824a2f049d33b2a1b4406bfc86b\",\"name\":\"Marc\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/85b6c585f298a873f9f4be166b9fbba00a9ad2482b92863d227e5d227136d135?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/85b6c585f298a873f9f4be166b9fbba00a9ad2482b92863d227e5d227136d135?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/85b6c585f298a873f9f4be166b9fbba00a9ad2482b92863d227e5d227136d135?s=96&d=mm&r=g\",\"caption\":\"Marc\"},\"url\":\"https:\\\/\\\/www.clickstorm.de\\\/blog\\\/author\\\/marc\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"PHP f\u00fcr Fortgeschrittene: PHPStan & CS Fixer - clickstorm Blog","description":"Du bist ein fortgeschrittener PHP-Entwickler? Programmiere effizienter mit Tools wie PHPStan und PHP Coding Standards Fixer; erfahre hier wie","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.clickstorm.de\/blog\/php-fuer-fortgeschrittene\/","og_locale":"de_DE","og_type":"article","og_title":"PHP f\u00fcr Fortgeschrittene: PHPStan & CS Fixer - clickstorm Blog","og_description":"Du bist ein fortgeschrittener PHP-Entwickler? Programmiere effizienter mit Tools wie PHPStan und PHP Coding Standards Fixer; erfahre hier wie","og_url":"https:\/\/www.clickstorm.de\/blog\/php-fuer-fortgeschrittene\/","og_site_name":"clickstorm Blog","article_publisher":"https:\/\/de-de.facebook.com\/clickstorm\/","article_published_time":"2022-09-21T10:58:24+00:00","article_modified_time":"2026-02-02T09:11:10+00:00","og_image":[{"width":1170,"height":577,"url":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2022\/09\/php-fuer-fortgeschrittene-phpstan_teaser-01.jpg","type":"image\/jpeg"}],"author":"Marc","twitter_card":"summary_large_image","twitter_creator":"@clickstorm_gmbh","twitter_site":"@clickstorm_gmbh","twitter_misc":{"Verfasst von":"Marc","Gesch\u00e4tzte Lesezeit":"6\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.clickstorm.de\/blog\/php-fuer-fortgeschrittene\/#article","isPartOf":{"@id":"https:\/\/www.clickstorm.de\/blog\/php-fuer-fortgeschrittene\/"},"author":{"name":"Marc","@id":"https:\/\/www.clickstorm.de\/blog\/#\/schema\/person\/594fb824a2f049d33b2a1b4406bfc86b"},"headline":"PHP f\u00fcr Fortgeschrittene: PHPStan &#038; CS Fixer","datePublished":"2022-09-21T10:58:24+00:00","dateModified":"2026-02-02T09:11:10+00:00","mainEntityOfPage":{"@id":"https:\/\/www.clickstorm.de\/blog\/php-fuer-fortgeschrittene\/"},"wordCount":983,"commentCount":2,"publisher":{"@id":"https:\/\/www.clickstorm.de\/blog\/#organization"},"image":{"@id":"https:\/\/www.clickstorm.de\/blog\/php-fuer-fortgeschrittene\/#primaryimage"},"thumbnailUrl":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2022\/09\/php-fuer-fortgeschrittene-phpstan_teaser-01.jpg","keywords":["Entwicklung","PHP","Technik","Testen","Tutorial"],"articleSection":["CMS","eCommerce","Tools"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.clickstorm.de\/blog\/php-fuer-fortgeschrittene\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.clickstorm.de\/blog\/php-fuer-fortgeschrittene\/","url":"https:\/\/www.clickstorm.de\/blog\/php-fuer-fortgeschrittene\/","name":"PHP f\u00fcr Fortgeschrittene: PHPStan & CS Fixer - clickstorm Blog","isPartOf":{"@id":"https:\/\/www.clickstorm.de\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.clickstorm.de\/blog\/php-fuer-fortgeschrittene\/#primaryimage"},"image":{"@id":"https:\/\/www.clickstorm.de\/blog\/php-fuer-fortgeschrittene\/#primaryimage"},"thumbnailUrl":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2022\/09\/php-fuer-fortgeschrittene-phpstan_teaser-01.jpg","datePublished":"2022-09-21T10:58:24+00:00","dateModified":"2026-02-02T09:11:10+00:00","description":"Du bist ein fortgeschrittener PHP-Entwickler? Programmiere effizienter mit Tools wie PHPStan und PHP Coding Standards Fixer; erfahre hier wie","breadcrumb":{"@id":"https:\/\/www.clickstorm.de\/blog\/php-fuer-fortgeschrittene\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.clickstorm.de\/blog\/php-fuer-fortgeschrittene\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.clickstorm.de\/blog\/php-fuer-fortgeschrittene\/#primaryimage","url":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2022\/09\/php-fuer-fortgeschrittene-phpstan_teaser-01.jpg","contentUrl":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2022\/09\/php-fuer-fortgeschrittene-phpstan_teaser-01.jpg","width":1170,"height":577,"caption":"Lehrer zeigt auf Tafel mit PHPStan Logo"},{"@type":"BreadcrumbList","@id":"https:\/\/www.clickstorm.de\/blog\/php-fuer-fortgeschrittene\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.clickstorm.de\/blog\/"},{"@type":"ListItem","position":2,"name":"PHP f\u00fcr Fortgeschrittene: PHPStan &#038; CS Fixer"}]},{"@type":"WebSite","@id":"https:\/\/www.clickstorm.de\/blog\/#website","url":"https:\/\/www.clickstorm.de\/blog\/","name":"clickstorm Blog","description":"Neuigkeiten rund um Webentwicklung","publisher":{"@id":"https:\/\/www.clickstorm.de\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.clickstorm.de\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/www.clickstorm.de\/blog\/#organization","name":"clickstorm GmbH","url":"https:\/\/www.clickstorm.de\/blog\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.clickstorm.de\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2017\/11\/logo.svg","contentUrl":"https:\/\/www.clickstorm.de\/blog\/wp-content\/uploads\/2017\/11\/logo.svg","caption":"clickstorm GmbH"},"image":{"@id":"https:\/\/www.clickstorm.de\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/de-de.facebook.com\/clickstorm\/","https:\/\/x.com\/clickstorm_gmbh","https:\/\/www.youtube.com\/channel\/UCEaU1eUbug6OiI4uU6vA-cA"]},{"@type":"Person","@id":"https:\/\/www.clickstorm.de\/blog\/#\/schema\/person\/594fb824a2f049d33b2a1b4406bfc86b","name":"Marc","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/85b6c585f298a873f9f4be166b9fbba00a9ad2482b92863d227e5d227136d135?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/85b6c585f298a873f9f4be166b9fbba00a9ad2482b92863d227e5d227136d135?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/85b6c585f298a873f9f4be166b9fbba00a9ad2482b92863d227e5d227136d135?s=96&d=mm&r=g","caption":"Marc"},"url":"https:\/\/www.clickstorm.de\/blog\/author\/marc\/"}]}},"_links":{"self":[{"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/posts\/5290","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/comments?post=5290"}],"version-history":[{"count":11,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/posts\/5290\/revisions"}],"predecessor-version":[{"id":6442,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/posts\/5290\/revisions\/6442"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/media\/5323"}],"wp:attachment":[{"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/media?parent=5290"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/categories?post=5290"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.clickstorm.de\/blog\/wp-json\/wp\/v2\/tags?post=5290"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}