{"id":164,"date":"2021-01-09T22:00:00","date_gmt":"2021-01-09T22:00:00","guid":{"rendered":"https:\/\/rishikantsri.in\/blog\/?p=164"},"modified":"2023-09-22T08:34:50","modified_gmt":"2023-09-22T08:34:50","slug":"object-oriented-programming-oop-in-php-a-comprehensive-guide-with-practical-examples","status":"publish","type":"post","link":"https:\/\/rishikantsri.in\/blog\/object-oriented-programming-oop-in-php-a-comprehensive-guide-with-practical-examples\/","title":{"rendered":"Object-Oriented Programming (OOP) in PHP : A Comprehensive Guide with Practical Examples"},"content":{"rendered":"\n<p>Object-Oriented Programming (OOP) is a powerful paradigm that allows developers to create modular and maintainable code by modeling real-world entities as objects. PHP , the latest major release of this popular scripting language, comes with numerous enhancements and new features that make it even more robust for OOP. In this blog post, we will delve deep into the key OOP features in PHP, complete with detailed explanations and practical examples.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Classes and Objects: The Foundation of OOP<\/h2>\n\n\n\n<p>In PHP, a class serves as a blueprint for creating objects, and objects are instances of a class that encapsulates data and behavior. Let&#8217;s start by creating a simple class and then instantiate an object from it.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Class Declaration<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:19.800000190734863px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"class Person {\n    public $name;\n    public $age;\n\n    public function __construct($name, $age) {\n        $this-&gt;name = $name;\n        $this-&gt;age = $age;\n    }\n\n    public function greet() {\n        return &quot;Hello, my name is {$this-&gt;name} and I am {$this-&gt;age} years old.&quot;;\n    }\n}\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #B392F0\"> Person {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> $name;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> $age;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> __construct($name<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $age) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">name <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $name;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">age <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $age;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> greet() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;Hello, my name is {<\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #FFAB70\">name} and I am {<\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #FFAB70\">age} years old.&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>In this example, we&#8217;ve defined a <code>Person<\/code> class with properties (<code>$name<\/code> and <code>$age<\/code>) and two methods (<code>__construct<\/code> and <code>greet<\/code>).<\/p>\n\n\n\n<ul>\n<li>The <code>__construct<\/code> method is a special method called a constructor. It initializes object properties when a new object is created.<\/li>\n\n\n\n<li>The <code>greet<\/code> method is a regular method that returns a greeting message.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Object Instantiation<\/h3>\n\n\n\n<p>Now, let&#8217;s create an object of the <code>Person<\/code> class and use it:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:9.899993896484375px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$person = new Person(&quot;John&quot;, 30);\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$person <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">new<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">Person<\/span><span style=\"color: #B392F0\">(<\/span><span style=\"color: #FFAB70\">&quot;John&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F8F8F8\">30<\/span><span style=\"color: #B392F0\">);<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Here, we&#8217;ve created an object named <code>$person<\/code> from the <code>Person<\/code> class with the name &#8220;John&#8221; and age 30.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Accessing Properties and Methods<\/h3>\n\n\n\n<p>Once we have an object, we can access its properties and call its methods:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:9.899999618530273px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"echo $person-&gt;name; \/\/ Output: John\necho $person-&gt;greet(); \/\/ Output: Hello, my name is John and I am 30 years old.\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">echo $person<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">name; <\/span><span style=\"color: #6B737C\">\/\/ Output: John<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">echo $person<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">greet<\/span><span style=\"color: #BBBBBB\">()<\/span><span style=\"color: #B392F0\">; <\/span><span style=\"color: #6B737C\">\/\/ Output: Hello, my name is John and I am 30 years old.<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>We can access the <code>name<\/code> property directly using the arrow operator (<code>-&gt;<\/code>) and call the <code>greet<\/code> method to obtain a greeting message.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Visibility Modifiers: Controlling Access to Members<\/h2>\n\n\n\n<p>PHP introduced three visibility modifiers: <code>public<\/code>, <code>protected<\/code>, and <code>private<\/code>. These modifiers control the accessibility of class members (properties and methods).<\/p>\n\n\n\n<ul>\n<li><code>public<\/code>: Public members are accessible from anywhere.<\/li>\n\n\n\n<li><code>protected<\/code>: Protected members are only accessible from within the class itself and its subclasses.<\/li>\n\n\n\n<li><code>private<\/code>: Private members are only accessible from within the class itself.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Example with Visibility Modifiers<\/h3>\n\n\n\n<p>Let&#8217;s modify our <code>Person<\/code> class to demonstrate these visibility modifiers:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:19.80000114440918px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"class Person {\n    public $name;\n    protected $age;\n    private $email;\n\n    public function __construct($name, $age, $email) {\n        $this-&gt;name = $name;\n        $this-&gt;age = $age;\n        $this-&gt;email = $email;\n    }\n\n    public function greet() {\n        return &quot;Hello, my name is {$this-&gt;name} and I am {$this-&gt;age} years old. Contact me at {$this-&gt;email}.&quot;;\n    }\n}\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #B392F0\"> Person {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> $name;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">protected<\/span><span style=\"color: #B392F0\"> $age;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">private<\/span><span style=\"color: #B392F0\"> $email;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> __construct($name<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $age<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $email) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">name <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $name;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">age <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $age;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">email <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $email;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> greet() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;Hello, my name is {<\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #FFAB70\">name} and I am {<\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #FFAB70\">age} years old. Contact me at {<\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #FFAB70\">email}.&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>In this updated class, we have three properties: <code>$name<\/code> (public), <code>$age<\/code> (protected), and <code>$email<\/code> (private). Now, let&#8217;s create an object and attempt to access these properties:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:9.899999618530273px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$person = new Person(&quot;John&quot;, 30, &quot;john@example.com&quot;);\necho $person-&gt;name; \/\/ Output: John\necho $person-&gt;age; \/\/ Error: Cannot access protected property Person::$age\necho $person-&gt;email; \/\/ Error: Cannot access private property Person::$email\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$person <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">new<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">Person<\/span><span style=\"color: #B392F0\">(<\/span><span style=\"color: #FFAB70\">&quot;John&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F8F8F8\">30<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;john@example.com&quot;<\/span><span style=\"color: #B392F0\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">echo $person<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">name; <\/span><span style=\"color: #6B737C\">\/\/ Output: John<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">echo $person<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">age; <\/span><span style=\"color: #6B737C\">\/\/ Error: Cannot access protected property Person::$age<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">echo $person<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">email; <\/span><span style=\"color: #6B737C\">\/\/ Error: Cannot access private property Person::$email<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>As you can see, we can access the <code>name<\/code> property publicly, but the <code>age<\/code> and <code>email<\/code> properties have restricted access due to their visibility modifiers.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Constructor Property Promotion: Simplifying Property Initialization<\/h2>\n\n\n\n<p>PHP  introduced constructor property promotion, which streamlines the process of declaring and initializing class properties in the constructor.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Example with Constructor Property Promotion<\/h3>\n\n\n\n<p>Let&#8217;s refactor our <code>Person<\/code> class using constructor property promotion:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:19.80000114440918px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"class Person {\n    public function __construct(\n        public string $name,\n        protected int $age,\n        private string $email\n    ) {}\n\n    public function greet() {\n        return &quot;Hello, my name is {$this-&gt;name} and I am {$this-&gt;age} years old. Contact me at {$this-&gt;email}.&quot;;\n    }\n}\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #B392F0\"> Person {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> __construct(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">string<\/span><span style=\"color: #B392F0\"> $name<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">protected<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">int<\/span><span style=\"color: #B392F0\"> $age<\/span><span style=\"color: #BBBBBB\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">private<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">string<\/span><span style=\"color: #B392F0\"> $email<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    ) {}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> greet() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;Hello, my name is {<\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #FFAB70\">name} and I am {<\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #FFAB70\">age} years old. Contact me at {<\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #FFAB70\">email}.&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>In this updated class, we declare the properties directly in the constructor parameters, eliminating the need for separate property declarations. The result is a more concise and readable code.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:9.899999618530273px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$person = new Person(&quot;John&quot;, 30, &quot;john@example.com&quot;);\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$person <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">new<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">Person<\/span><span style=\"color: #B392F0\">(<\/span><span style=\"color: #FFAB70\">&quot;John&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F8F8F8\">30<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;john@example.com&quot;<\/span><span style=\"color: #B392F0\">);<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Inheritance and Polymorphism: Building Hierarchies<\/h2>\n\n\n\n<p>PHP supports inheritance, which allows you to create subclasses that inherit properties and methods from a parent class. Let&#8217;s create a <code>Student<\/code> subclass to demonstrate inheritance and polymorphism:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Example with Inheritance and Polymorphism<\/h3>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:19.80000114440918px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"class Student extends Person {\n    public string $school;\n\n    public function __construct($name, $age, $email, $school) {\n        parent::__construct($name, $age, $email);\n        $this-&gt;school = $school;\n    }\n\n    public function greet() {\n        return &quot;Hello, I'm a student. My name is {$this-&gt;name}, I am {$this-&gt;age} years old, and I attend {$this-&gt;school}.&quot;;\n    }\n}\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #B392F0\"> Student <\/span><span style=\"color: #F97583\">extends<\/span><span style=\"color: #B392F0\"> Person {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">string<\/span><span style=\"color: #B392F0\"> $school;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> __construct($name<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $age<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $email<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $school) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">parent::<\/span><span style=\"color: #B392F0\">__construct<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$name<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $age<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> $email<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">school <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $school;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> greet() {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;Hello, I&#39;m a student. My name is {<\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #FFAB70\">name}, I am {<\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #FFAB70\">age} years old, and I attend {<\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #FFAB70\">school}.&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>In this example:<\/p>\n\n\n\n<ul>\n<li>The <code>Student<\/code> class extends the <code>Person<\/code> class, inheriting its properties and methods.<\/li>\n\n\n\n<li>We&#8217;ve added a new property, <code>$school<\/code>, specific to the <code>Student<\/code> class.<\/li>\n\n\n\n<li>The <code>greet<\/code> method in the <code>Student<\/code> class overrides the parent class&#8217;s <code>greet<\/code> method to provide a customized greeting.<\/li>\n<\/ul>\n\n\n\n<p>Now, let&#8217;s create a <code>Student<\/code> object and see how polymorphism works:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:9.899999618530273px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"$student = new Student(&quot;Alice&quot;, 18, &quot;alice@example.com&quot;, &quot;XYZ High School&quot;);\necho $student-&gt;greet(); \/\/ Output: Hello, I'm a student. My name is Alice, I am 18 years old, and I attend XYZ High School.\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #B392F0\">$student <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">new<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">Student<\/span><span style=\"color: #B392F0\">(<\/span><span style=\"color: #FFAB70\">&quot;Alice&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F8F8F8\">18<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;alice@example.com&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;XYZ High School&quot;<\/span><span style=\"color: #B392F0\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">echo $student<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">greet<\/span><span style=\"color: #BBBBBB\">()<\/span><span style=\"color: #B392F0\">; <\/span><span style=\"color: #6B737C\">\/\/ Output: Hello, I&#39;m a student. My name is Alice, I am 18 years old, and I attend XYZ High School.<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Advanced Object-Oriented Programming (OOP) in PHP : Techniques and Best Practices<\/h2>\n\n\n\n<p>Object-Oriented Programming (OOP) in PHP  goes beyond basic class and object definitions. In this advanced guide, we will explore techniques and best practices that will help you write more efficient, maintainable, and extensible code. We&#8217;ll use practical examples to illustrate these concepts.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. <strong>Abstract Classes and Methods<\/strong><\/h2>\n\n\n\n<p>Abstract classes and methods are key components of OOP. Abstract classes cannot be instantiated, but they serve as a blueprint for other classes to inherit from. Abstract methods, on the other hand, define a method signature without providing an implementation.<\/p>\n\n\n\n<p>Let&#8217;s illustrate this with an example:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:19.80000114440918px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"abstract class Shape {\n    abstract public function calculateArea(): float;\n}\n\nclass Circle extends Shape {\n    private float $radius;\n\n    public function __construct(float $radius) {\n        $this-&gt;radius = $radius;\n    }\n\n    public function calculateArea(): float {\n        return pi() * pow($this-&gt;radius, 2);\n    }\n}\n\nclass Rectangle extends Shape {\n    private float $width;\n    private float $height;\n\n    public function __construct(float $width, float $height) {\n        $this-&gt;width = $width;\n        $this-&gt;height = $height;\n    }\n\n    public function calculateArea(): float {\n        return $this-&gt;width * $this-&gt;height;\n    }\n}\n\n$circle = new Circle(5);\n$rectangle = new Rectangle(4, 6);\n\necho $circle-&gt;calculateArea(); \/\/ Output: 78.539816339745\necho $rectangle-&gt;calculateArea(); \/\/ Output: 24\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">abstract<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">class<\/span><span style=\"color: #B392F0\"> Shape {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">abstract<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> calculateArea()<\/span><span style=\"color: #F97583\">:<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">float<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #B392F0\"> Circle <\/span><span style=\"color: #F97583\">extends<\/span><span style=\"color: #B392F0\"> Shape {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">private<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">float<\/span><span style=\"color: #B392F0\"> $radius;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> __construct(<\/span><span style=\"color: #F97583\">float<\/span><span style=\"color: #B392F0\"> $radius) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">radius <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $radius;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> calculateArea()<\/span><span style=\"color: #F97583\">:<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">float<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> pi<\/span><span style=\"color: #BBBBBB\">()<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">*<\/span><span style=\"color: #B392F0\"> pow<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">radius<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F8F8F8\">2<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #B392F0\"> Rectangle <\/span><span style=\"color: #F97583\">extends<\/span><span style=\"color: #B392F0\"> Shape {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">private<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">float<\/span><span style=\"color: #B392F0\"> $width;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">private<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">float<\/span><span style=\"color: #B392F0\"> $height;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> __construct(<\/span><span style=\"color: #F97583\">float<\/span><span style=\"color: #B392F0\"> $width<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">float<\/span><span style=\"color: #B392F0\"> $height) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">width <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $width;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">height <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $height;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> calculateArea()<\/span><span style=\"color: #F97583\">:<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">float<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">width <\/span><span style=\"color: #F97583\">*<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">height;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$circle <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">new<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">Circle<\/span><span style=\"color: #B392F0\">(<\/span><span style=\"color: #F8F8F8\">5<\/span><span style=\"color: #B392F0\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$rectangle <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">new<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">Rectangle<\/span><span style=\"color: #B392F0\">(<\/span><span style=\"color: #F8F8F8\">4<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F8F8F8\">6<\/span><span style=\"color: #B392F0\">);<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">echo $circle<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">calculateArea<\/span><span style=\"color: #BBBBBB\">()<\/span><span style=\"color: #B392F0\">; <\/span><span style=\"color: #6B737C\">\/\/ Output: 78.539816339745<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">echo $rectangle<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">calculateArea<\/span><span style=\"color: #BBBBBB\">()<\/span><span style=\"color: #B392F0\">; <\/span><span style=\"color: #6B737C\">\/\/ Output: 24<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Here, we have an abstract class <code>Shape<\/code> with an abstract method <code>calculateArea()<\/code>. Both <code>Circle<\/code> and <code>Rectangle<\/code> extend the <code>Shape<\/code> class and provide their own implementations of <code>calculateArea()<\/code>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. <strong>Interfaces<\/strong><\/h2>\n\n\n\n<p>Interfaces define a contract that classes must adhere to by implementing the specified methods. PHP allows a class to implement multiple interfaces, enabling flexible code design.<\/p>\n\n\n\n<p>Let&#8217;s create an example with multiple interfaces:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:19.80000114440918px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"interface Logger {\n    public function log(string $message): void;\n}\n\ninterface Notifier {\n    public function sendNotification(string $message): void;\n}\n\nclass EmailNotifier implements Notifier {\n    public function sendNotification(string $message): void {\n        \/\/ Send email notification\n    }\n}\n\nclass FileLogger implements Logger {\n    public function log(string $message): void {\n        \/\/ Log message to a file\n    }\n}\n\nclass NotificationService implements Logger, Notifier {\n    private Logger $logger;\n    private Notifier $notifier;\n\n    public function __construct(Logger $logger, Notifier $notifier) {\n        $this-&gt;logger = $logger;\n        $this-&gt;notifier = $notifier;\n    }\n\n    public function log(string $message): void {\n        $this-&gt;logger-&gt;log($message);\n    }\n\n    public function sendNotification(string $message): void {\n        $this-&gt;notifier-&gt;sendNotification($message);\n    }\n}\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">interface<\/span><span style=\"color: #B392F0\"> Logger {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> log(<\/span><span style=\"color: #F97583\">string<\/span><span style=\"color: #B392F0\"> $message)<\/span><span style=\"color: #F97583\">:<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">void<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">interface<\/span><span style=\"color: #B392F0\"> Notifier {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> sendNotification(<\/span><span style=\"color: #F97583\">string<\/span><span style=\"color: #B392F0\"> $message)<\/span><span style=\"color: #F97583\">:<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">void<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #B392F0\"> EmailNotifier <\/span><span style=\"color: #F97583\">implements<\/span><span style=\"color: #B392F0\"> Notifier {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> sendNotification(<\/span><span style=\"color: #F97583\">string<\/span><span style=\"color: #B392F0\"> $message)<\/span><span style=\"color: #F97583\">:<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">void<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #6B737C\">\/\/ Send email notification<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #B392F0\"> FileLogger <\/span><span style=\"color: #F97583\">implements<\/span><span style=\"color: #B392F0\"> Logger {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> log(<\/span><span style=\"color: #F97583\">string<\/span><span style=\"color: #B392F0\"> $message)<\/span><span style=\"color: #F97583\">:<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">void<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #6B737C\">\/\/ Log message to a file<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #B392F0\"> NotificationService <\/span><span style=\"color: #F97583\">implements<\/span><span style=\"color: #B392F0\"> Logger<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> Notifier {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">private<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">Logger<\/span><span style=\"color: #B392F0\"> $logger;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">private<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">Notifier<\/span><span style=\"color: #B392F0\"> $notifier;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> __construct(<\/span><span style=\"color: #79B8FF\">Logger<\/span><span style=\"color: #B392F0\"> $logger<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">Notifier<\/span><span style=\"color: #B392F0\"> $notifier) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">logger <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $logger;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">notifier <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $notifier;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> log(<\/span><span style=\"color: #F97583\">string<\/span><span style=\"color: #B392F0\"> $message)<\/span><span style=\"color: #F97583\">:<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">void<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">logger<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">log<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$message<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> sendNotification(<\/span><span style=\"color: #F97583\">string<\/span><span style=\"color: #B392F0\"> $message)<\/span><span style=\"color: #F97583\">:<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">void<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">notifier<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">sendNotification<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #B392F0\">$message<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>In this example, we define two interfaces: <code>Logger<\/code> and <code>Notifier<\/code>. We then create classes that implement these interfaces, such as <code>EmailNotifier<\/code> and <code>FileLogger<\/code>. Finally, the <code>NotificationService<\/code> class implements both <code>Logger<\/code> and <code>Notifier<\/code>, allowing it to log messages and send notifications.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. <strong>Traits<\/strong><\/h2>\n\n\n\n<p>Traits provide a way to reuse code in multiple classes without inheritance. They are like partial classes or reusable code snippets.<\/p>\n\n\n\n<p>Let&#8217;s create a trait for logging:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:19.80000114440918px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"trait Loggable {\n    public function log(string $message): void {\n        \/\/ Log the message\n    }\n}\n\nclass OrderProcessor {\n    use Loggable;\n\n    public function processOrder(int $orderId): void {\n        \/\/ Process the order\n        $this-&gt;log(&quot;Order processed: #&quot; . $orderId);\n    }\n}\n\nclass PaymentProcessor {\n    use Loggable;\n\n    public function processPayment(float $amount): void {\n        \/\/ Process the payment\n        $this-&gt;log(&quot;Payment processed: $&quot; . $amount);\n    }\n}\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">trait<\/span><span style=\"color: #B392F0\"> Loggable {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> log(<\/span><span style=\"color: #F97583\">string<\/span><span style=\"color: #B392F0\"> $message)<\/span><span style=\"color: #F97583\">:<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">void<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #6B737C\">\/\/ Log the message<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #B392F0\"> OrderProcessor {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">use<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">Loggable<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> processOrder(<\/span><span style=\"color: #F97583\">int<\/span><span style=\"color: #B392F0\"> $orderId)<\/span><span style=\"color: #F97583\">:<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">void<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #6B737C\">\/\/ Process the order<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">log<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&quot;Order processed: #&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #B392F0\"> $orderId<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #B392F0\"> PaymentProcessor {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">use<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">Loggable<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> processPayment(<\/span><span style=\"color: #F97583\">float<\/span><span style=\"color: #B392F0\"> $amount)<\/span><span style=\"color: #F97583\">:<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">void<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #6B737C\">\/\/ Process the payment<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">log<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&quot;Payment processed: $&quot;<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">.<\/span><span style=\"color: #B392F0\"> $amount<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>In this example, we define a <code>Loggable<\/code> trait with a <code>log<\/code> method. Both <code>OrderProcessor<\/code> and <code>PaymentProcessor<\/code> classes use the <code>Loggable<\/code> trait to include the <code>log<\/code> method without inheritance.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. <strong>Dependency Injection and SOLID Principles<\/strong><\/h2>\n\n\n\n<p>The SOLID principles are essential guidelines for designing clean and maintainable OOP code. One of these principles, the Dependency Inversion Principle (DIP), advocates for dependency injection.<\/p>\n\n\n\n<p>Let&#8217;s see how this works in practice:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:19.80000114440918px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"class Database {\n    public function query(string $sql): array {\n        \/\/ Execute the SQL query and return results\n    }\n}\n\nclass UserRepository {\n    private Database $db;\n\n    public function __construct(Database $db) {\n        $this-&gt;db = $db;\n    }\n\n    public function findUserById(int $userId): array {\n        \/\/ Query the database to find the user\n        return $this-&gt;db-&gt;query(&quot;SELECT * FROM users WHERE id = $userId&quot;);\n    }\n}\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #B392F0\"> Database {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> query(<\/span><span style=\"color: #F97583\">string<\/span><span style=\"color: #B392F0\"> $sql)<\/span><span style=\"color: #F97583\">:<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">array<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #6B737C\">\/\/ Execute the SQL query and return results<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #B392F0\"> UserRepository {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">private<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">Database<\/span><span style=\"color: #B392F0\"> $db;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> __construct(<\/span><span style=\"color: #79B8FF\">Database<\/span><span style=\"color: #B392F0\"> $db) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">db <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $db;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> findUserById(<\/span><span style=\"color: #F97583\">int<\/span><span style=\"color: #B392F0\"> $userId)<\/span><span style=\"color: #F97583\">:<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">array<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #6B737C\">\/\/ Query the database to find the user<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">db<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">query<\/span><span style=\"color: #BBBBBB\">(<\/span><span style=\"color: #FFAB70\">&quot;<\/span><span style=\"color: #F97583\">SELECT<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">*<\/span><span style=\"color: #FFAB70\"> <\/span><span style=\"color: #F97583\">FROM<\/span><span style=\"color: #FFAB70\"> users <\/span><span style=\"color: #F97583\">WHERE<\/span><span style=\"color: #FFAB70\"> id <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #FFAB70\"> $userId&quot;<\/span><span style=\"color: #BBBBBB\">)<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>In this example, we have a <code>Database<\/code> class and a <code>UserRepository<\/code> class that depends on the <code>Database<\/code> class. By injecting the <code>Database<\/code> instance through the constructor, we adhere to the DIP, making our code more flexible and testable.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. <strong>Magic Methods<\/strong><\/h2>\n\n\n\n<p>PHP provides magic methods that enable you to intercept and handle specific actions within your classes. These methods start with a double underscore, such as <code>__construct<\/code> or <code>__toString<\/code>.<\/p>\n\n\n\n<p>Let&#8217;s illustrate this with the <code>__toString<\/code> magic method:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#b392f0;--cbp-line-number-width:19.80000114440918px;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:16px 0 0 16px;width:100%;text-align:left;background-color:#1f1f1f\"><span style=\"background:#a37ced;padding:0.3rem 0.5rem 0.2rem;border-radius:1rem;font-size:0.8em;line-height:1;height:1.25rem;text-align:center;display:inline-flex;align-items:center;justify-content:center;color:#1f1f1f\">PHP<\/span><\/span><span role=\"button\" tabindex=\"0\" data-code=\"class Product {\n    private string $name;\n    private float $price;\n\n    public function __construct(string $name, float $price) {\n        $this-&gt;name = $name;\n        $this-&gt;price = $price;\n    }\n\n    public function __toString(): string {\n        return &quot;$this-&gt;name: $$this-&gt;price&quot;;\n    }\n}\n\n$product = new Product(&quot;Laptop&quot;, 999.99);\necho $product; \/\/ Output: Laptop: $999.99\n\" style=\"color:#b392f0;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M4.5 12.75l6 6 9-13.5\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M16.5 8.25V6a2.25 2.25 0 00-2.25-2.25H6A2.25 2.25 0 003.75 6v8.25A2.25 2.25 0 006 16.5h2.25m8.25-8.25H18a2.25 2.25 0 012.25 2.25V18A2.25 2.25 0 0118 20.25h-7.5A2.25 2.25 0 018.25 18v-1.5m8.25-8.25h-6a2.25 2.25 0 00-2.25 2.25v6\"><\/path><\/svg><\/span><pre class=\"shiki min-dark\" style=\"background-color: #1f1f1f\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F97583\">class<\/span><span style=\"color: #B392F0\"> Product {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">private<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">string<\/span><span style=\"color: #B392F0\"> $name;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">private<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">float<\/span><span style=\"color: #B392F0\"> $price;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> __construct(<\/span><span style=\"color: #F97583\">string<\/span><span style=\"color: #B392F0\"> $name<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">float<\/span><span style=\"color: #B392F0\"> $price) {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">name <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $name;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #79B8FF\">$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #B392F0\">price <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> $price;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    <\/span><span style=\"color: #F97583\">public<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">function<\/span><span style=\"color: #B392F0\"> __toString()<\/span><span style=\"color: #F97583\">:<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">string<\/span><span style=\"color: #B392F0\"> {<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">        <\/span><span style=\"color: #F97583\">return<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #FFAB70\">&quot;$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #FFAB70\">name: $$this<\/span><span style=\"color: #F97583\">-&gt;<\/span><span style=\"color: #FFAB70\">price&quot;<\/span><span style=\"color: #B392F0\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">$product <\/span><span style=\"color: #F97583\">=<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F97583\">new<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #79B8FF\">Product<\/span><span style=\"color: #B392F0\">(<\/span><span style=\"color: #FFAB70\">&quot;Laptop&quot;<\/span><span style=\"color: #BBBBBB\">,<\/span><span style=\"color: #B392F0\"> <\/span><span style=\"color: #F8F8F8\">999<\/span><span style=\"color: #BBBBBB\">.<\/span><span style=\"color: #F8F8F8\">99<\/span><span style=\"color: #B392F0\">);<\/span><\/span>\n<span class=\"line\"><span style=\"color: #B392F0\">echo $product; <\/span><span style=\"color: #6B737C\">\/\/ Output: Laptop: $999.99<\/span><\/span>\n<span class=\"line\"><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Advanced OOP techniques in PHP extend your ability to design and build robust and maintainable applications. Abstract classes, interfaces, traits, dependency injection, SOLID principles, and magic methods are powerful tools in your OOP toolbox. By mastering these concepts and applying them judiciously, you can create efficient, modular, and extensible code that stands up to the complexities of modern software development.<\/p>\n\n\n\n<p>Happy Coding! \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Object-Oriented Programming (OOP) is a powerful paradigm that allows developers to create modular and maintainable code by modeling real-world entities as objects. PHP , the latest major release of this popular scripting language, comes with numerous enhancements and new features that make it even more robust for OOP. In this blog post, we will delve [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[16,1,10],"tags":[17,4],"_links":{"self":[{"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/posts\/164"}],"collection":[{"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/comments?post=164"}],"version-history":[{"count":7,"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/posts\/164\/revisions"}],"predecessor-version":[{"id":242,"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/posts\/164\/revisions\/242"}],"wp:attachment":[{"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/media?parent=164"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/categories?post=164"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rishikantsri.in\/blog\/wp-json\/wp\/v2\/tags?post=164"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}