{"id":102198,"date":"2021-11-03T03:37:20","date_gmt":"2021-11-03T01:37:20","guid":{"rendered":"https:\/\/prohoster.info\/blog\/novosti-interneta\/vypusk-phpstan-1-0-staticheskogo-analizatora-dlya-koda-na-yazyke-php"},"modified":"2021-11-03T03:37:20","modified_gmt":"2021-11-03T01:37:20","slug":"vypusk-phpstan-1-0-staticheskogo-analizatora-dlya-koda-na-yazyke-php","status":"publish","type":"post","link":"https:\/\/prohoster.info\/da\/blog\/news\/vypusk-phpstan-1-0-staticheskogo-analizatora-dlya-koda-na-yazyke-php","title":{"rendered":"Udgivelsen af PHPStan 1.0, en statisk kodeanalysator for PHP-kode","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Efter seks \u00e5rs udvikling er den f\u00f8rste stabile udgave af PHPStan 1.0, en statisk analyser, der muligg\u00f8r at finde fejl i PHP-kode uden at udf\u00f8re den og uden brug af unit-tests, blevet lanceret. Projektets kode er skrevet i PHP og distribueres under MIT-licensen.        <\/p>\n<p>Analysatoren tilbyder 10 niveauer af kontrol, hvor hvert efterf\u00f8lgende niveau udvider mulighederne i det forrige og leverer strengere kontroller:        <\/p>\n<li class=\"l\"> Basischecks, identifikation af ukendte klasser, funktioner og metoder ($this), udefinerede variabler samt overf\u00f8rsel af et forkert antal argumenter.\n<li class=\"l\"> Identifikation af sandsynligt udefinerede variabler, ukendte magic-metoder og klasseegenskaber med __call og __get.\n<li class=\"l\"> Identifikation af ukendte metoder i alle udtryk, ikke begr\u00e6nset til opkald via $this. Kontrol af PHPDocs.\n<li class=\"l\"> Kontrol af returneringstyper og tildeling af typer til egenskaber.\n<li class=\"l\"> Grundl\u00e6ggende identifikation af \u2018d\u00f8de\u2019 (aldeles uanvendte) koder. Identifikation af instanceof-opkald, der altid returnerer false, samt blokke af \u2018else\u2019, der aldrig udf\u00f8res, og koden, der kommer efter return.\n<li class=\"l\"> Kontrol af argumenttyper, der overf\u00f8res til metoder og funktioner.\n<li class=\"l\"> Advarsel om manglende annoteringer med typeinformation.\n<li class=\"l\"> Advarsel om ugyldige union-typer, der definerer samlinger af to eller flere typer.\n<li class=\"l\"> Advarsel ved opkald af metoder og adgang til egenskaber med \u2018nullable\u2019 typer.\n<li class=\"l\"> Kontrol af brugen af typen \u2018mixed\u2019.\n<p>Eksempler p\u00e5 identificerede grundl\u00e6ggende problemer:  <\/p>\n<ul>\n<li class=\"l\"> Eksistensen af klasser, der anvendes i instanceof, catch, typehints og andre sprogkonstruktioner.\n<li class=\"l\"> Eksistensen og tilg\u00e6ngeligheden af kaldte metoder og funktioner, samt antallet af overf\u00f8rte argumenter.\n<li class=\"l\"> Kontrol af, at metoden returnerer data med den samme type, der er defineret i return-udtrykket.\n<li class=\"l\"> Eksistensen og synligheden af egenskaber, der tilg\u00e5s, samt kontrol af de deklarerede og faktiske datatyper, der anvendes i egenskaber.\n<li class=\"l\"> Korrektheden af antallet af parametre, der er overf\u00f8rt til opkald af sprintf\/printf i tekstformatblokken.\n<li class=\"l\"> Eksistensen af variabler under hensyntagen til blokke dannet af betingelses- og l\u00f8kkestrukturer.\n<li class=\"l\"> Un\u00f8dvendige typeomdannelser (f.eks. \u2018(string) \u2018foo\u2019\u2019) og strenge tjek (\u2018===\u2019 og \u2018!==\u2019) af data med forskellige typer og operander, der altid returnerer false.  <\/ul>\n<p>N\u00f8gleinnovationer i PHPStan 1.0:  <\/p>\n<ul>\n<li class=\"l\"> Implementeret kontrolniveau \u20189\u2019, der foretager kontroller af brugen af typen \u2018mixed\u2019, designet til at modtage parametre af forskellige typer i en funktion. Det niende niveau identificerer usikre brug af \u2018mixed\u2019, s\u00e5som overf\u00f8rsel af v\u00e6rdier med typen \u2018mixed\u2019 til en anden type, opkald af metoder med typen \u2018mixed\u2019 og adgang til dens egenskaber, da de muligvis ikke findes.\n<li class=\"l\"> Styring af identitetstjek for returnerede v\u00e6rdier ved samme funktion kald med brug af annotationerne @phpstan-pure og @phpstan-impure.\n<li class=\"l\"> Typeanalyse i try-catch-finally konstruktioner med brug af annotationerne @throws.\n<li class=\"l\"> Identifikation af bestemte, men ubrugte interne (private) egenskaber, metoder og konstanter.\n<li class=\"l\"> Overdragelse af inkompatible callback-kald til array-h\u00e5ndteringsfunktioner, s\u00e5som array_map og usort.\n<li class=\"l\"> Typeinspektion for manglende typehint-annotationer.\n<li class=\"l\"> Sikret kompatibilitet af typeskildringer med PHPDocs, hvilket muligg\u00f8r brug af typer fra fejlmeddelelser i PHPDocs.  <\/ul>\n<p>Kilde: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/www.opennet.ru\/opennews\/art.shtml?num=56087\">opennet.ru<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u043e\u0441\u043b\u0435 \u0448\u0435\u0441\u0442\u0438 \u043b\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043b\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 PHPStan 1.0, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043a\u043e\u0434\u0435 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 PHP \u0431\u0435\u0437 \u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f unit-\u0442\u0435\u0441\u0442\u043e\u0432. \u041a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 PHP \u0438 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 MIT. \u0410\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 10 \u0443\u0440\u043e\u0432\u043d\u0435\u0439 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0440\u043e\u0433\u0438\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438: [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-102198","post","type-post","status-publish","format-standard","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u043e\u0441\u043b\u0435 \u0448\u0435\u0441\u0442\u0438 \u043b\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043b\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 PHPStan 1.0, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043a\u043e\u0434\u0435 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 PHP \u0431\u0435\u0437 \u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f unit-\u0442\u0435\u0441\u0442\u043e\u0432.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/da\/blog\/news\/vypusk-phpstan-1-0-staticheskogo-analizatora-dlya-koda-na-yazyke-php\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0412\u044b\u043f\u0443\u0441\u043a PHPStan 1.0, \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u043a\u043e\u0434\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 PHP | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u043e\u0441\u043b\u0435 \u0448\u0435\u0441\u0442\u0438 \u043b\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043b\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 PHPStan 1.0, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043a\u043e\u0434\u0435 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 PHP \u0431\u0435\u0437 \u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f unit-\u0442\u0435\u0441\u0442\u043e\u0432.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/da\/blog\/news\/vypusk-phpstan-1-0-staticheskogo-analizatora-dlya-koda-na-yazyke-php\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2021-11-03T01:37:20+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2021-11-03T01:37:20+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Udgivelse af PHPStan 1.0, den statiske analyser til PHP-kode | ProHoster","description":"Efter seks \u00e5rs udvikling fandt den f\u00f8rste stabile udgave af statisk analysetool PHPStan 1.0 sted, der muligg\u00f8r opdagelse af fejl i PHP-kode uden at k\u00f8re den og bruge unit-tests.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/news\/vypusk-phpstan-1-0-staticheskogo-analizatora-dlya-koda-na-yazyke-php","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0412\u044b\u043f\u0443\u0441\u043a PHPStan 1.0, \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u043a\u043e\u0434\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 PHP | ProHoster","og:description":"\u041f\u043e\u0441\u043b\u0435 \u0448\u0435\u0441\u0442\u0438 \u043b\u0435\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043b\u0441\u044f \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 PHPStan 1.0, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0435\u0433\u043e \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043a\u043e\u0434\u0435 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 PHP \u0431\u0435\u0437 \u0435\u0433\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f unit-\u0442\u0435\u0441\u0442\u043e\u0432.","og:url":"https:\/\/prohoster.info\/da\/blog\/news\/vypusk-phpstan-1-0-staticheskogo-analizatora-dlya-koda-na-yazyke-php","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2021-11-03T01:37:20+00:00","article:modified_time":"2021-11-03T01:37:20+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"102198","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-11-03 01:38:46","updated":"2022-09-28 06:22:55","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/102198","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=102198"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/102198\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=102198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=102198"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=102198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}