6. OOP Standards

Classes and Objects:

  • Follow the Single Responsibility Principle (SRP)

  • Encapsulate class properties.

    
    // Good
    class User 
    {     
      private $name;      
    
      public function getName() 
      {         
          return $this->name;     
      } 
    }  

// Bad class User {
public $name;

function getName() 
{         
    return $this->name;     
} 

}

#### Inheritance and Interfaces:
- Use inheritance to extend functionality.
- Implement interfaces to define contracts.

```php
// Good
interface UserInterface
{     
    public function getName(); 
}  
class User implements UserInterface 
{     
    public function getName() 
    {         
        return $this->name;     
    } 
}  

// Bad
class User 
{     
    public function getName() 
    {         
        return $this->name;     
    } 
}

Traits:

Use traits to reuse code across multiple classes.

// Good
trait Loggable 
{     
    public function log($message) 
    {         
        echo $message;     
    } 
}  
class User 
{     
    use Loggable; 
}  

// Bad
class User 
{     
    public function log($message) 
    {         
        echo $message;     
    } 
} 

Abstract Classes:

Use abstract classes for shared functionality that should not be instantiated.

// Good
abstract class Shape 
{     
    abstract public function getArea(); 
}  
class Circle extends Shape 
{     
    public function getArea() 
    {         
        return 3.14 * $this->radius * $this->radius;     
    } 
}  

// Bad
class Circle 
{     
    public function getArea() 
    {         
        return 3.14 * $this->radius * $this->radius;     
    } 

}

Design Patterns:

Implement common design patterns (e.g., Singleton, Factory, Strategy).

// Good (Singleton)
class Database 
{     
    private static $instance;     

    private function __construct() {}      

    public static function getInstance() 
    {         
        if (self::$instance === null) {             
            self::$instance = new self();         
        }         
        return self::$instance;     
    } 
}

// Bad
class Database 
{     
    public function __construct() {} 
}