Les Managers

Définition

Un manager est une entité capable de gérer (manager...) un objet existant.
Le manager se défini comme le manager d'une star, c'est par lui que passera toutes les intéractions avec l'objet managé.
C'est aussi lui qui exécutera les requêtes SQL liées à cet objet.

Exemple

Un manager sera très souvent composé des propriétés et méthodes suivantes :
class ObjectManager
{
	private $link;

	public function __construct($link)
	{
		$this->link = $link;
	}
	public function create($property1, $property2, $property3)
	{
		$object = new Object($this->link);
		$object->setProperty1($property1);
		$object->setProperty2($property2);
		$object->setProperty3($property3);
		$property1 = mysqli_real_escape_string($this->link, $object->getProperty1());
		$property2 = mysqli_real_escape_string($this->link, $object->getProperty2());
		$property3 = intval($object->getProperty3());
		$request = "INSERT INTO object (property1, property2, property3) ";
		$request .= "VALUES('".$property1."', '".$property2."', '".$property3."')";
		mysqli_query($this->link, $request);
		if ($res)
			return $this->select(mysqli_insert_id($this->link));
		else
			throw new Exception("Internal server error");
	}
	public function delete($id)
	{
		$request = "DELETE FROM object WHERE id='".intval($id)."'";
		mysqli_query($this->link, $request);
	}
	public function update($object)
	{
		$property1 = mysqli_real_escape_string($this->link, $object->getProperty1());
		$property2 = mysqli_real_escape_string($this->link, $object->getProperty2());
		$property3 = intval($object->getProperty3());
		$request = "UPDATE object SET ";
		$request .= "property1='".$property1."' ";
		$request .= "property2='".$property2."' ";
		$request .= "property3='".$property3."' ";
		$request .= "WHERE id='".$object->getId()."'";
		mysqli_query($this->link, $request);
	}
	public function select($id)
	{
		$request = "SELECT * FROM object WHERE id='".intval($id)."'";
		$res = mysqli_query($this->link, $request);
		$object = mysqli_fetch_object($res, 'Object', array($this->link));
		return $object;
	}
	public function selectAll()
	{
		$request = "SELECT * FROM object";
		$res = mysqli_query($this->link, $request);
		$resultat = array();
		while ($object = mysqli_fetch_object($res, 'Object', array($this->link)))
		{
			$resultat[] = $object;
		}
		return $resultat;
	}
}
Pour instancier (et donc créer le manager) il suffira de :
$objectManager = new ObjectManager($link);

/!\ ATTENTION /!\

N'oubliez pas ! Un manager a besoin de connaitre la définition de l'objet qu'il manage, n'oubliez donc pas de require le fichier contenant sa définition :)
require('models/Object.class.php');
Ou avec un autoloader.