PHP je věda

Objektově orientované programování nejen v PHP

Konstruktor

K čemu je dobrý konstruktor, jak by měl správně vypadat a co by měl dělat? Konstruktor v ideálním případě pouze inicializuje objekt. Inicializace objektu znamená obsazení vlastností třídy. Pokud si tedy představíme následující objekt, úloha konstruktoru je pouze přiřazení vstupních parametrů. Zcela čistý konstruktor nesmí obsahovat žádnou logiku. Pokud má programátor pocit, že potřebuje v konstuktoru nějaké logické operace, tuto úlohu by měla převzít „Factory metoda“, např. Statická.

<?php
// file: User.php
 
class User
{
    /**
     * @var string
     */
    protected $name;
 
    /**
     * @var string
     */
    protected $password;
 
    /**
     * @var string
     */
    protected $id;
 
    /**
     * @param string $name
     * @param string $password
     * @param int    $id
     */
    public function __construct($name, $password, $id)
    {
        $this->name     = $name;
        $this->password = $password;
        $this->id       = $id;
    }
 
    /**
     * @param string $jsonString
     *
     * @return User
     */
    static public function createFromJsonData($jsonString)
    {
        $data     = json_decode($jsonString);
        $userData = $data['userData'];
        $name     = $userData['name'];
        $password = $userData['password'];
        $id       = $userData['id'];
        return new self($name, $password, $id);
    }
 
    /**
     * @return string
     */
    public function getName() {
        return $this->name;
    }
 
    /**
     * @param string $name
     */
    public function setName($name) {
        $this->name = $name;
    }
 
    // implement all getters and setters
}

Jak vidíme, konstruktor třídy User je velmi jednoduchý – pouze řeší přiřazení vstupních parametrů na vlastnosti objektu. Pokud máme pocit, že potřebujeme vytvořit instanci objektu nějakým efektivnějším způsobem (v našem případě se například velmi často objevuje nutnost vytvořit instanci objektu z json formátu), je možné použít jednoduchou factory metodu. Tato jednoduchá factory metoda nám usnadní práci a sniží duplikaci kódu v případě, že musíme často vytvářet uživatele z json stringu, ale zároveň můžeme vždy pracovat s čistým jedoduchým konstruktorem, který nám vždy vytvoří plně inicializovaný objekt.

Práce s plně inicialozovanými objekty je základem čistého OOP.