{"id":5751,"date":"2022-03-28T04:45:26","date_gmt":"2022-03-28T04:45:26","guid":{"rendered":"https:\/\/studysection.com\/blog\/?p=5751"},"modified":"2022-03-28T06:08:32","modified_gmt":"2022-03-28T06:08:32","slug":"template-method-design-pattern-in-php","status":"publish","type":"post","link":"https:\/\/studysection.com\/blog\/template-method-design-pattern-in-php\/","title":{"rendered":"Template Method design pattern in PHP"},"content":{"rendered":"<p>The template method behavioral <a href=\"https:\/\/studysection.com\/blog\/module-design-pattern-in-javascript-jquery\/\">design pattern<\/a>  is to define an algorithmic program as a skeleton of operations and leave the details to be implemented in subclasses. These steps can be abstract methods that don\u2019t require implementation while declaration time. That\u2019s why they will be implemented in subclasses.  Subclasses will override only the steps defined in the base class without changing the overall algorithm\u2019s structure.<\/p>\n<h2>Uses of Template Method:<\/h2>\n<ul>\n<li>To reduce the duplication of code by splitting the code into similar \u2018steps \u2018 or \u2018sections\u2019.<\/li>\n<li>To extend the code easily with controlling of core parts of it, this is useful. <\/li>\n<li>When you have a set of steps (algorithm), that might have more than one implementation. The base set of steps will be defined in the base class, but subclasses can create their own implementation of each step by replacing the base class steps.<\/li>\n<\/ul>\n<p>Let us take an example of manufacturing cars and motorbikes. There are common four steps to creating vehicles:<\/p>\n<ul>\n<li>addEngine()<\/li>\n<li>addWheels()<\/li>\n<li>paintVechicle()<\/li>\n<li>sellVechicle()<\/li>\n<\/ul>\n<p>As we know, every vehicle has different engines and wheels. So, the code to implement these properties will be different. We need to just declare addEngine() and addWheels() methods as abstract methods in the base class. The actual implementation of these methods will be performed in subclasses.<br \/>\nThe process of painting\/selling all types of vehicles is the same. So, we don\u2019t need to rewrite the code again and again for every vehicle. We will declare and define paintVechicle() and sellVechicle() methods in parent class.<\/p>\n<p><strong>Parent class:<\/strong><br \/>\n<code>&lt;?php<br \/>\nabstract class VehicleManufacturing<br \/>\n{<br \/>\n    abstract protected function addWheels();<br \/>\n    abstract protected function addEngine();<br \/>\n    protected function paintVehicle()<br \/>\n    {<br \/>\n        echo \" Painting of vehicle\\n\";<br \/>\n    }<br \/>\n    final protected function sellVehicle()<br \/>\n    {<br \/>\n        echo \"Vehicle Selling\\n\";<br \/>\n    }<br \/>\n   final  public function template()<br \/>\n    { \/\/ this is the template method<br \/>\n        $this->addEngine();<br \/>\n        $this->addWheels();<br \/>\n        $this->paintVehicle();<br \/>\n        $this->sellVehicle();<br \/>\n    }<br \/>\n}<\/code><\/p>\n<p><strong>Subclass1:<\/strong><br \/>\n<code>class Car extends VehicleManufacturing<br \/>\n{<br \/>\n    protected function addWheels()<br \/>\n    {<br \/>\n        echo \" Four Car wheels added \\n\";<br \/>\n    }<br \/>\n    protected  function addEngine()<br \/>\n    {<br \/>\n        echo \" Car engine added\\n\";<br \/>\n    }<br \/>\n}<\/code><\/p>\n<p><strong>Subclass2:<\/strong><br \/>\n<code>class Motorbike extends VehicleManufacturing<br \/>\n{<br \/>\n    protected function addWheels()<br \/>\n    {<br \/>\n        echo \u201cTwo Motorbike wheels added\\n\";<br \/>\n    }<br \/>\n    protected  function addEngine()<br \/>\n    {<br \/>\n        echo \"Motorbike engine added\\n\";<br \/>\n    }<br \/>\n}<\/code><\/p>\n<p>Both subclasses are extending the main abstract template class \u201cVehicleManufacturing\u201d. Only two methods \u201caddWheels()\u201d and \u201caddEngine()\u201d need to be implemented in child classes.<br \/>\nWe always only have the same steps, in the same order, that are defined in the template() method. So, we will call only the template() method for creating both types of vehicles:<br \/>\n<code>&lt;?php<br \/>\n$motorbike = new Motorbike;<br \/>\n$motorbike->template();<br \/>\n$car = new Car();<br \/>\n$car->template();<br \/>\n?><\/code><\/p>\n<p><small><em>StudySection gives an opportunity to beginners and experts in .NET framework to go through StudySection\u2019s <a href=\"https:\/\/www.studysection.com\/c-sharp-net-web-developer-advanced-diploma\">.NET Certification Exam<\/a> and get a .NET certification for enhancement of career in programming. If you have knowledge of the .NET framework then you can get a certificate through an online exam at StudySection.<\/em><\/small><\/p>\n","protected":false},"excerpt":{"rendered":"<p>The template method behavioral design pattern is to define an algorithmic program as a skeleton of operations and leave the<\/p>\n","protected":false},"author":1,"featured_media":5752,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[200,441],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Template Method design pattern in PHP - SS Blog<\/title>\n<meta name=\"description\" content=\"The template method behavioral design pattern is to define an algorithmic program as a skeleton of operations implemented in subclasses.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/studysection.com\/blog\/template-method-design-pattern-in-php\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Template Method design pattern in PHP - SS Blog\" \/>\n<meta property=\"og:description\" content=\"The template method behavioral design pattern is to define an algorithmic program as a skeleton of operations implemented in subclasses.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/studysection.com\/blog\/template-method-design-pattern-in-php\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog Posts on famous people, innovations and educational topics\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/studysection\" \/>\n<meta property=\"article:published_time\" content=\"2022-03-28T04:45:26+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-03-28T06:08:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/studysection.com\/blog\/wp-content\/uploads\/2022\/03\/Template.png\" \/>\n\t<meta property=\"og:image:width\" content=\"300\" \/>\n\t<meta property=\"og:image:height\" content=\"200\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"admin-studysection-blog\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@studysection\" \/>\n<meta name=\"twitter:site\" content=\"@studysection\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin-studysection-blog\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/studysection.com\/blog\/template-method-design-pattern-in-php\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/studysection.com\/blog\/template-method-design-pattern-in-php\/\"},\"author\":{\"name\":\"admin-studysection-blog\",\"@id\":\"https:\/\/studysection.com\/blog\/#\/schema\/person\/db367e2c29a12d1808fb1979edb3d402\"},\"headline\":\"Template Method design pattern in PHP\",\"datePublished\":\"2022-03-28T04:45:26+00:00\",\"dateModified\":\"2022-03-28T06:08:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/studysection.com\/blog\/template-method-design-pattern-in-php\/\"},\"wordCount\":367,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/studysection.com\/blog\/#organization\"},\"keywords\":[\"php\",\"Template\"],\"articleSection\":[\"Learn and Grow\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/studysection.com\/blog\/template-method-design-pattern-in-php\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/studysection.com\/blog\/template-method-design-pattern-in-php\/\",\"url\":\"https:\/\/studysection.com\/blog\/template-method-design-pattern-in-php\/\",\"name\":\"Template Method design pattern in PHP - SS Blog\",\"isPartOf\":{\"@id\":\"https:\/\/studysection.com\/blog\/#website\"},\"datePublished\":\"2022-03-28T04:45:26+00:00\",\"dateModified\":\"2022-03-28T06:08:32+00:00\",\"description\":\"The template method behavioral design pattern is to define an algorithmic program as a skeleton of operations implemented in subclasses.\",\"breadcrumb\":{\"@id\":\"https:\/\/studysection.com\/blog\/template-method-design-pattern-in-php\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/studysection.com\/blog\/template-method-design-pattern-in-php\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/studysection.com\/blog\/template-method-design-pattern-in-php\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/studysection.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Template Method design pattern in PHP\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/studysection.com\/blog\/#website\",\"url\":\"https:\/\/studysection.com\/blog\/\",\"name\":\"Blog Posts on famous people, innovations and educational topics\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/studysection.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/studysection.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/studysection.com\/blog\/#organization\",\"name\":\"StudySection\",\"url\":\"https:\/\/studysection.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/studysection.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/studysection.com\/blog\/wp-content\/uploads\/2021\/10\/studySection-logo.png\",\"contentUrl\":\"https:\/\/studysection.com\/blog\/wp-content\/uploads\/2021\/10\/studySection-logo.png\",\"width\":920,\"height\":440,\"caption\":\"StudySection\"},\"image\":{\"@id\":\"https:\/\/studysection.com\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/studysection\",\"https:\/\/twitter.com\/studysection\",\"https:\/\/www.instagram.com\/study.section\/\",\"https:\/\/www.linkedin.com\/company\/studysection\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/studysection.com\/blog\/#\/schema\/person\/db367e2c29a12d1808fb1979edb3d402\",\"name\":\"admin-studysection-blog\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/studysection.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/054ac87a6874df1932004239cd8eab36?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/054ac87a6874df1932004239cd8eab36?s=96&d=mm&r=g\",\"caption\":\"admin-studysection-blog\"},\"url\":\"https:\/\/studysection.com\/blog\/author\/admin-studysection-blog\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Template Method design pattern in PHP - SS Blog","description":"The template method behavioral design pattern is to define an algorithmic program as a skeleton of operations implemented in subclasses.","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:\/\/studysection.com\/blog\/template-method-design-pattern-in-php\/","og_locale":"en_US","og_type":"article","og_title":"Template Method design pattern in PHP - SS Blog","og_description":"The template method behavioral design pattern is to define an algorithmic program as a skeleton of operations implemented in subclasses.","og_url":"https:\/\/studysection.com\/blog\/template-method-design-pattern-in-php\/","og_site_name":"Blog Posts on famous people, innovations and educational topics","article_publisher":"https:\/\/www.facebook.com\/studysection","article_published_time":"2022-03-28T04:45:26+00:00","article_modified_time":"2022-03-28T06:08:32+00:00","og_image":[{"width":300,"height":200,"url":"https:\/\/studysection.com\/blog\/wp-content\/uploads\/2022\/03\/Template.png","type":"image\/png"}],"author":"admin-studysection-blog","twitter_card":"summary_large_image","twitter_creator":"@studysection","twitter_site":"@studysection","twitter_misc":{"Written by":"admin-studysection-blog","Est. reading time":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/studysection.com\/blog\/template-method-design-pattern-in-php\/#article","isPartOf":{"@id":"https:\/\/studysection.com\/blog\/template-method-design-pattern-in-php\/"},"author":{"name":"admin-studysection-blog","@id":"https:\/\/studysection.com\/blog\/#\/schema\/person\/db367e2c29a12d1808fb1979edb3d402"},"headline":"Template Method design pattern in PHP","datePublished":"2022-03-28T04:45:26+00:00","dateModified":"2022-03-28T06:08:32+00:00","mainEntityOfPage":{"@id":"https:\/\/studysection.com\/blog\/template-method-design-pattern-in-php\/"},"wordCount":367,"commentCount":0,"publisher":{"@id":"https:\/\/studysection.com\/blog\/#organization"},"keywords":["php","Template"],"articleSection":["Learn and Grow"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/studysection.com\/blog\/template-method-design-pattern-in-php\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/studysection.com\/blog\/template-method-design-pattern-in-php\/","url":"https:\/\/studysection.com\/blog\/template-method-design-pattern-in-php\/","name":"Template Method design pattern in PHP - SS Blog","isPartOf":{"@id":"https:\/\/studysection.com\/blog\/#website"},"datePublished":"2022-03-28T04:45:26+00:00","dateModified":"2022-03-28T06:08:32+00:00","description":"The template method behavioral design pattern is to define an algorithmic program as a skeleton of operations implemented in subclasses.","breadcrumb":{"@id":"https:\/\/studysection.com\/blog\/template-method-design-pattern-in-php\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/studysection.com\/blog\/template-method-design-pattern-in-php\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/studysection.com\/blog\/template-method-design-pattern-in-php\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/studysection.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Template Method design pattern in PHP"}]},{"@type":"WebSite","@id":"https:\/\/studysection.com\/blog\/#website","url":"https:\/\/studysection.com\/blog\/","name":"Blog Posts on famous people, innovations and educational topics","description":"","publisher":{"@id":"https:\/\/studysection.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/studysection.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/studysection.com\/blog\/#organization","name":"StudySection","url":"https:\/\/studysection.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/studysection.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/studysection.com\/blog\/wp-content\/uploads\/2021\/10\/studySection-logo.png","contentUrl":"https:\/\/studysection.com\/blog\/wp-content\/uploads\/2021\/10\/studySection-logo.png","width":920,"height":440,"caption":"StudySection"},"image":{"@id":"https:\/\/studysection.com\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/studysection","https:\/\/twitter.com\/studysection","https:\/\/www.instagram.com\/study.section\/","https:\/\/www.linkedin.com\/company\/studysection"]},{"@type":"Person","@id":"https:\/\/studysection.com\/blog\/#\/schema\/person\/db367e2c29a12d1808fb1979edb3d402","name":"admin-studysection-blog","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/studysection.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/054ac87a6874df1932004239cd8eab36?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/054ac87a6874df1932004239cd8eab36?s=96&d=mm&r=g","caption":"admin-studysection-blog"},"url":"https:\/\/studysection.com\/blog\/author\/admin-studysection-blog\/"}]}},"views":260,"_links":{"self":[{"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/posts\/5751"}],"collection":[{"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/comments?post=5751"}],"version-history":[{"count":2,"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/posts\/5751\/revisions"}],"predecessor-version":[{"id":5754,"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/posts\/5751\/revisions\/5754"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/media\/5752"}],"wp:attachment":[{"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/media?parent=5751"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/categories?post=5751"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/studysection.com\/blog\/wp-json\/wp\/v2\/tags?post=5751"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}