{"id":28277,"date":"2017-12-11T19:49:03","date_gmt":"2017-12-11T17:49:03","guid":{"rendered":"https:\/\/mamchenkov.net\/wordpress\/?p=28277"},"modified":"2017-12-11T19:49:03","modified_gmt":"2017-12-11T17:49:03","slug":"rector-reconstruct-legacy-php-codebase-to-modern-standards","status":"publish","type":"post","link":"https:\/\/mamchenkov.net\/wordpress\/2017\/12\/11\/rector-reconstruct-legacy-php-codebase-to-modern-standards\/","title":{"rendered":"rector &#8211; reconstruct legacy PHP codebase to modern standards"},"content":{"rendered":"<!-- google_ad_section_start -->\n<p><a href=\"https:\/\/github.com\/rectorphp\/rector\">rector<\/a> looks like an excellent tool for those days when you need to rewrite large chunks of legacy code for the modern coding standards and best practices.\u00a0 Of course, there are IDEs that can help a lot with refactoring, but they are usually complex and slow.\u00a0 Regular expressions have always been a poor man&#8217;s choice for replacing old code with new code.\u00a0 But life can be easier and better.\u00a0 rector helps you find and replace things like namespaces, class names, method names and property names; change type hints and values of parameters; replace magic methods with their real implementations, and much more.<\/p>\n<p>I&#8217;m sure I&#8217;ll be trying it out Real Soon Now &#8482;, with the upcoming release of <a href=\"https:\/\/github.com\/cakephp\/cakephp\/wiki\/3.6-Roadmap\">CakePHP 3.6<\/a>.<\/p>\n<!-- google_ad_section_end -->\n","protected":false},"excerpt":{"rendered":"<!-- google_ad_section_start -->\n<p>rector looks like an excellent tool for those days when you need to rewrite large chunks of legacy code for the modern coding standards and best practices.\u00a0 Of course, there are IDEs that can help a lot with refactoring, but they are usually complex and slow.\u00a0 Regular expressions have always been a poor man&#8217;s choice &hellip; <a href=\"https:\/\/mamchenkov.net\/wordpress\/2017\/12\/11\/rector-reconstruct-legacy-php-codebase-to-modern-standards\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">rector &#8211; reconstruct legacy PHP codebase to modern standards<\/span><\/a><\/p>\n<!-- google_ad_section_end -->\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"rector - reconstruct legacy PHP codebase to modern standards #WebDev #PHP #CakePHP","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false,"_links_to":"","_links_to_target":""},"categories":[1,18,62,1334],"tags":[1537,38,1330],"keyring_services":[],"class_list":["post-28277","post","type-post","status-publish","format-standard","hentry","category-general","category-programming","category-technology","category-web-work","tag-cakephp","tag-php","tag-web-development"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.8 - aioseo.com -->\n\t<meta name=\"description\" content=\"rector looks like an excellent tool for those days when you need to rewrite large chunks of legacy code for the modern coding standards and best practices. Of course, there are IDEs that can help a lot with refactoring, but they are usually complex and slow. Regular expressions have always been a poor man&#039;s choice\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Leonid Mamchenkov\"\/>\n\t<meta name=\"google-site-verification\" content=\"VHvdD0_usx1_4DzKy_QCVcICVgX2EgA2ybELT-wl7kQ\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/mamchenkov.net\/wordpress\/2017\/12\/11\/rector-reconstruct-legacy-php-codebase-to-modern-standards\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.8\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Leonid Mamchenkov - Life, universe, and everything else\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"rector \u2013 reconstruct legacy PHP codebase to modern standards - Leonid Mamchenkov\" \/>\n\t\t<meta property=\"og:description\" content=\"rector looks like an excellent tool for those days when you need to rewrite large chunks of legacy code for the modern coding standards and best practices. Of course, there are IDEs that can help a lot with refactoring, but they are usually complex and slow. Regular expressions have always been a poor man&#039;s choice\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/mamchenkov.net\/wordpress\/2017\/12\/11\/rector-reconstruct-legacy-php-codebase-to-modern-standards\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2017-12-11T17:49:03+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2017-12-11T17:49:03+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/MamchenkovBlog\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@mamchenkov\" \/>\n\t\t<meta name=\"twitter:title\" content=\"rector \u2013 reconstruct legacy PHP codebase to modern standards - Leonid Mamchenkov\" \/>\n\t\t<meta name=\"twitter:description\" content=\"rector looks like an excellent tool for those days when you need to rewrite large chunks of legacy code for the modern coding standards and best practices. Of course, there are IDEs that can help a lot with refactoring, but they are usually complex and slow. Regular expressions have always been a poor man&#039;s choice\" \/>\n\t\t<meta name=\"twitter:creator\" content=\"@mamchenkov\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2017\\\/12\\\/11\\\/rector-reconstruct-legacy-php-codebase-to-modern-standards\\\/#blogposting\",\"name\":\"rector \\u2013 reconstruct legacy PHP codebase to modern standards - Leonid Mamchenkov\",\"headline\":\"rector &#8211; reconstruct legacy PHP codebase to modern standards\",\"author\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#person\"},\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2017\\\/12\\\/11\\\/rector-reconstruct-legacy-php-codebase-to-modern-standards\\\/#articleImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"Leonid Mamchenkov\"},\"datePublished\":\"2017-12-11T19:49:03+02:00\",\"dateModified\":\"2017-12-11T19:49:03+02:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2017\\\/12\\\/11\\\/rector-reconstruct-legacy-php-codebase-to-modern-standards\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2017\\\/12\\\/11\\\/rector-reconstruct-legacy-php-codebase-to-modern-standards\\\/#webpage\"},\"articleSection\":\"All, Programming, Technology, Web work, CakePHP, PHP, web development\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2017\\\/12\\\/11\\\/rector-reconstruct-legacy-php-codebase-to-modern-standards\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/#listItem\",\"name\":\"Technology\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/#listItem\",\"position\":2,\"name\":\"Technology\",\"item\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/programming\\\/#listItem\",\"name\":\"Programming\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/programming\\\/#listItem\",\"position\":3,\"name\":\"Programming\",\"item\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/programming\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2017\\\/12\\\/11\\\/rector-reconstruct-legacy-php-codebase-to-modern-standards\\\/#listItem\",\"name\":\"rector &#8211; reconstruct legacy PHP codebase to modern standards\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/#listItem\",\"name\":\"Technology\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2017\\\/12\\\/11\\\/rector-reconstruct-legacy-php-codebase-to-modern-standards\\\/#listItem\",\"position\":4,\"name\":\"rector &#8211; reconstruct legacy PHP codebase to modern standards\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/category\\\/technology\\\/programming\\\/#listItem\",\"name\":\"Programming\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#person\",\"name\":\"Leonid Mamchenkov\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2017\\\/12\\\/11\\\/rector-reconstruct-legacy-php-codebase-to-modern-standards\\\/#personImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"Leonid Mamchenkov\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\",\"url\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/\",\"name\":\"Leonid Mamchenkov\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2017\\\/12\\\/11\\\/rector-reconstruct-legacy-php-codebase-to-modern-standards\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g\",\"width\":96,\"height\":96,\"caption\":\"Leonid Mamchenkov\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2017\\\/12\\\/11\\\/rector-reconstruct-legacy-php-codebase-to-modern-standards\\\/#webpage\",\"url\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2017\\\/12\\\/11\\\/rector-reconstruct-legacy-php-codebase-to-modern-standards\\\/\",\"name\":\"rector \\u2013 reconstruct legacy PHP codebase to modern standards - Leonid Mamchenkov\",\"description\":\"rector looks like an excellent tool for those days when you need to rewrite large chunks of legacy code for the modern coding standards and best practices. Of course, there are IDEs that can help a lot with refactoring, but they are usually complex and slow. Regular expressions have always been a poor man's choice\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/2017\\\/12\\\/11\\\/rector-reconstruct-legacy-php-codebase-to-modern-standards\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/author\\\/leonid\\\/#author\"},\"datePublished\":\"2017-12-11T19:49:03+02:00\",\"dateModified\":\"2017-12-11T19:49:03+02:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#website\",\"url\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/\",\"name\":\"Blog of Leonid Mamchenkov\",\"description\":\"Life, universe, and everything else\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/mamchenkov.net\\\/wordpress\\\/#person\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"rector \u2013 reconstruct legacy PHP codebase to modern standards - Leonid Mamchenkov","description":"rector looks like an excellent tool for those days when you need to rewrite large chunks of legacy code for the modern coding standards and best practices. Of course, there are IDEs that can help a lot with refactoring, but they are usually complex and slow. Regular expressions have always been a poor man's choice","canonical_url":"https:\/\/mamchenkov.net\/wordpress\/2017\/12\/11\/rector-reconstruct-legacy-php-codebase-to-modern-standards\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"google-site-verification":"VHvdD0_usx1_4DzKy_QCVcICVgX2EgA2ybELT-wl7kQ","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/mamchenkov.net\/wordpress\/2017\/12\/11\/rector-reconstruct-legacy-php-codebase-to-modern-standards\/#blogposting","name":"rector \u2013 reconstruct legacy PHP codebase to modern standards - Leonid Mamchenkov","headline":"rector &#8211; reconstruct legacy PHP codebase to modern standards","author":{"@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author"},"publisher":{"@id":"https:\/\/mamchenkov.net\/wordpress\/#person"},"image":{"@type":"ImageObject","@id":"https:\/\/mamchenkov.net\/wordpress\/2017\/12\/11\/rector-reconstruct-legacy-php-codebase-to-modern-standards\/#articleImage","url":"https:\/\/secure.gravatar.com\/avatar\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g","width":96,"height":96,"caption":"Leonid Mamchenkov"},"datePublished":"2017-12-11T19:49:03+02:00","dateModified":"2017-12-11T19:49:03+02:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/mamchenkov.net\/wordpress\/2017\/12\/11\/rector-reconstruct-legacy-php-codebase-to-modern-standards\/#webpage"},"isPartOf":{"@id":"https:\/\/mamchenkov.net\/wordpress\/2017\/12\/11\/rector-reconstruct-legacy-php-codebase-to-modern-standards\/#webpage"},"articleSection":"All, Programming, Technology, Web work, CakePHP, PHP, web development"},{"@type":"BreadcrumbList","@id":"https:\/\/mamchenkov.net\/wordpress\/2017\/12\/11\/rector-reconstruct-legacy-php-codebase-to-modern-standards\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress#listItem","position":1,"name":"Home","item":"https:\/\/mamchenkov.net\/wordpress","nextItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/#listItem","name":"Technology"}},{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/#listItem","position":2,"name":"Technology","item":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/#listItem","name":"Programming"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/#listItem","position":3,"name":"Programming","item":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/","nextItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/2017\/12\/11\/rector-reconstruct-legacy-php-codebase-to-modern-standards\/#listItem","name":"rector &#8211; reconstruct legacy PHP codebase to modern standards"},"previousItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/#listItem","name":"Technology"}},{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/2017\/12\/11\/rector-reconstruct-legacy-php-codebase-to-modern-standards\/#listItem","position":4,"name":"rector &#8211; reconstruct legacy PHP codebase to modern standards","previousItem":{"@type":"ListItem","@id":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/#listItem","name":"Programming"}}]},{"@type":"Person","@id":"https:\/\/mamchenkov.net\/wordpress\/#person","name":"Leonid Mamchenkov","image":{"@type":"ImageObject","@id":"https:\/\/mamchenkov.net\/wordpress\/2017\/12\/11\/rector-reconstruct-legacy-php-codebase-to-modern-standards\/#personImage","url":"https:\/\/secure.gravatar.com\/avatar\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g","width":96,"height":96,"caption":"Leonid Mamchenkov"}},{"@type":"Person","@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author","url":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/","name":"Leonid Mamchenkov","image":{"@type":"ImageObject","@id":"https:\/\/mamchenkov.net\/wordpress\/2017\/12\/11\/rector-reconstruct-legacy-php-codebase-to-modern-standards\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/3cf6df002a284d78fb6e9d8222ca4d102e0832035ed6bc8447008bd234e131a4?s=96&d=identicon&r=g","width":96,"height":96,"caption":"Leonid Mamchenkov"}},{"@type":"WebPage","@id":"https:\/\/mamchenkov.net\/wordpress\/2017\/12\/11\/rector-reconstruct-legacy-php-codebase-to-modern-standards\/#webpage","url":"https:\/\/mamchenkov.net\/wordpress\/2017\/12\/11\/rector-reconstruct-legacy-php-codebase-to-modern-standards\/","name":"rector \u2013 reconstruct legacy PHP codebase to modern standards - Leonid Mamchenkov","description":"rector looks like an excellent tool for those days when you need to rewrite large chunks of legacy code for the modern coding standards and best practices. Of course, there are IDEs that can help a lot with refactoring, but they are usually complex and slow. Regular expressions have always been a poor man's choice","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/mamchenkov.net\/wordpress\/#website"},"breadcrumb":{"@id":"https:\/\/mamchenkov.net\/wordpress\/2017\/12\/11\/rector-reconstruct-legacy-php-codebase-to-modern-standards\/#breadcrumblist"},"author":{"@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author"},"creator":{"@id":"https:\/\/mamchenkov.net\/wordpress\/author\/leonid\/#author"},"datePublished":"2017-12-11T19:49:03+02:00","dateModified":"2017-12-11T19:49:03+02:00"},{"@type":"WebSite","@id":"https:\/\/mamchenkov.net\/wordpress\/#website","url":"https:\/\/mamchenkov.net\/wordpress\/","name":"Blog of Leonid Mamchenkov","description":"Life, universe, and everything else","inLanguage":"en-US","publisher":{"@id":"https:\/\/mamchenkov.net\/wordpress\/#person"}}]},"og:locale":"en_US","og:site_name":"Leonid Mamchenkov - Life, universe, and everything else","og:type":"article","og:title":"rector \u2013 reconstruct legacy PHP codebase to modern standards - Leonid Mamchenkov","og:description":"rector looks like an excellent tool for those days when you need to rewrite large chunks of legacy code for the modern coding standards and best practices. Of course, there are IDEs that can help a lot with refactoring, but they are usually complex and slow. Regular expressions have always been a poor man's choice","og:url":"https:\/\/mamchenkov.net\/wordpress\/2017\/12\/11\/rector-reconstruct-legacy-php-codebase-to-modern-standards\/","og:image":"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg","og:image:secure_url":"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg","og:image:width":1024,"og:image:height":1024,"article:published_time":"2017-12-11T17:49:03+00:00","article:modified_time":"2017-12-11T17:49:03+00:00","article:publisher":"https:\/\/www.facebook.com\/MamchenkovBlog","twitter:card":"summary_large_image","twitter:site":"@mamchenkov","twitter:title":"rector \u2013 reconstruct legacy PHP codebase to modern standards - Leonid Mamchenkov","twitter:description":"rector looks like an excellent tool for those days when you need to rewrite large chunks of legacy code for the modern coding standards and best practices. Of course, there are IDEs that can help a lot with refactoring, but they are usually complex and slow. Regular expressions have always been a poor man's choice","twitter:creator":"@mamchenkov","twitter:image":"https:\/\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2026\/03\/leonid-sailing-beer.jpg"},"aioseo_meta_data":{"post_id":"28277","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":"default","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,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2023-07-20 05:04:41","updated":"2026-01-15 13:23:44","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/mamchenkov.net\/wordpress\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/\" title=\"Technology\">Technology<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/\" title=\"Programming\">Programming<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\trector \u2013 reconstruct legacy PHP codebase to modern standards\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/mamchenkov.net\/wordpress"},{"label":"Technology","link":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/"},{"label":"Programming","link":"https:\/\/mamchenkov.net\/wordpress\/category\/technology\/programming\/"},{"label":"rector &#8211; reconstruct legacy PHP codebase to modern standards","link":"https:\/\/mamchenkov.net\/wordpress\/2017\/12\/11\/rector-reconstruct-legacy-php-codebase-to-modern-standards\/"}],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":11949,"url":"https:\/\/mamchenkov.net\/wordpress\/2009\/11\/29\/enforcing-coding-styles-in-php\/","url_meta":{"origin":28277,"position":0},"title":"Enforcing coding styles in PHP","author":"Leonid Mamchenkov","date":"November 29, 2009","format":false,"excerpt":"I came across a plugin for CakePHP which helps to check if the certain code follows CakePHP coding style.\u00a0 While I haven't tried it, I think the better way is to utilize CodeSniffer.\u00a0 As per PHP_CodeSniffer PEAR page: PHP_CodeSniffer tokenises PHP, JavaScript and CSS files and detects violations of a\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":27717,"url":"https:\/\/mamchenkov.net\/wordpress\/2017\/06\/22\/phinx-joins-cakephp\/","url_meta":{"origin":28277,"position":1},"title":"Phinx joins CakePHP!","author":"Leonid Mamchenkov","date":"June 22, 2017","format":false,"excerpt":"These are some really good news - Phinx joins CakePHP family! \u00a0If you are from a different technology stack and not familiar with these, Phinx is an excellent database migrations tool, which has been used by CakePHP framework for a while now. \u00a0The two worked great together. \u00a0Now that they\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":28847,"url":"https:\/\/mamchenkov.net\/wordpress\/2018\/10\/09\/php-safe-and-rector\/","url_meta":{"origin":28277,"position":2},"title":"PHP Safe and Rector","author":"Leonid Mamchenkov","date":"October 9, 2018","format":false,"excerpt":"I came across a couple of very interesting PHP libraries today. The first one is\u00a0thecodingmachine\/safe.\u00a0 This library wraps all PHP functions that return false on failure into another function that throws the exception instead. Think of all those file_get_contents() and json_decode() situations you had to code around.\u00a0 Not anymore.\u00a0 You\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":22103,"url":"https:\/\/mamchenkov.net\/wordpress\/2014\/07\/01\/cakephp-3-here-we-go-again\/","url_meta":{"origin":28277,"position":3},"title":"CakePHP 3, here we go again.","author":"Leonid Mamchenkov","date":"July 1, 2014","format":false,"excerpt":"As some of you might know, I'm a big fan of CakePHP framework. \u00a0I've used it on numerous projects since the beginning of times. \u00a0I've built projects small and large, migrated existing native PHP codebases to CakePHP and even survived a few major CakePHP upgrades - 1.2 to 2.0 comes\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":27886,"url":"https:\/\/mamchenkov.net\/wordpress\/2017\/08\/31\/cakephp-with-nightwatchjs-on-travis-ci\/","url_meta":{"origin":28277,"position":4},"title":"CakePHP with NightwatchJS on Travis CI","author":"Leonid Mamchenkov","date":"August 31, 2017","format":false,"excerpt":"My colleague Andrey Vystavkin has been setting up a testing environment for our CakePHP projects recently. \u00a0We had one before, of course, using PHPUnit. \u00a0But this time we wanted to add Google Chrome headless browser with some form of JavaScript test suite, so that we could cover functional tests and\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":23603,"url":"https:\/\/mamchenkov.net\/wordpress\/2015\/02\/25\/php-tags-once-and-for-all-yet-again\/","url_meta":{"origin":28277,"position":5},"title":"PHP tags &#8211; once and for all. Yet again.","author":"Leonid Mamchenkov","date":"February 25, 2015","format":false,"excerpt":"For those of us who have been using PHP since the early version 3 days and such, here is a modern day refresher for PHP tags: If a file is pure PHP code, it is preferable to omit the PHP closing tag at the end of the file. This prevents\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/28277","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/comments?post=28277"}],"version-history":[{"count":0,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/28277\/revisions"}],"wp:attachment":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/media?parent=28277"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/categories?post=28277"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/tags?post=28277"},{"taxonomy":"keyring_services","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/keyring_services?post=28277"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}