class User
{
function __construct($storage)
{
$this->storage = $storage;
}
// ...
}
$storage = new SessionStorage('SESSION_ID');
$user = new User($storage);
et ça
class Container
{
public function getUser()
{
return new User($this->getUserStorage());
}
public function getUserStorage()
{
return new SessionStorage('SESSION_ID');
}
}
$container = new Container();
Dans les deux cas, un objet est passé à la classe User, objet qu'il va bien falloir traiter dans le constructeur de User. Du coup, on ne peut plus utiliser User tout seul, si ?
Autre question : où intègre-ton la classe Container ? Dans le controller ?
Mais si tu veux uniquement utiliser Player, tu te retrouves à devoir utiliser Team aussi. Pas pratique.
Non tu n'es pas obligé car tu peux très bien faire de l'héritage et changer le comportement via une classe fille TeamBlue par exemple que tu peux passer à la classe Player.
Mais le mieux serait de demander une interface et non une classe.
Après concernant les interfaces, de mon côté je m'en sert surtout pour avoir plus de flexibilité dans l'injection de dépendance quand j'en ai besoin. Comme une interface oblige à définir les méthodes de celle-ci dans la classe qui l'implémente cela permet d'assurer qu'une classe à bien les méthode attendu et cela permet par exemple :
interface DireBonjour
{
/**
* @return string
*/
public function bonjour(): string;
}
Et voici 2 classes qui implémente l'interface DireBonjour :
class BonjourNormal implements DireBonjour
{
/**
* @return string
*/
public function bonjour(): string
{
return 'Bonjour normal que l\'on fait souvent';
}
}
class Coord2d implements DireBonjour
{
private $x = 3;
private $y = 5;
/**
* @return string
*/
public function bonjour(): string
{
return "X: {$this->x}, Y: {$this->y}";
}
}
On le voit bien que les 2 classes n'ont pas du tout de rôle en commun et donc que l'héritage ne serait pas la bonne solution. Mais pourtant on peut faire ceci :
function appel(DireBonjour $obj): void
{
echo $obj->bonjour();
echo "\n";
}
$bjrNormal = new BonjourNormal();
$coord = new Coord2d();
appel($bjrNormal);
appel($coord);
Ce qui donne bien comme résultat :
Bonjour normal que l'on fait souvent
X: 3, Y: 5
Bon après l'exemple est un peu con et ne sert pas à grand chose dans ce cas là mais il y a certains design pattern qui utilise des interfaces et peut-être que l'utilité te sera plus visible en regardant de ce côté là.
Je regarderai les interfaces quand j'aurai déjà réussi avec l'héritage
J'aimerais par exemple récupérer un article avec les auteurs correspondants.
controller.php
public function getArticleById($id)
{
$article = new articleModel();
$sqlArticleById = $article->sqlArticlebyId($id);
$authors = new authorModel();
$sqlAuthorsByArticle = $authors->sqlAuthorsByArticle($id);
$articleAuthorExtend = new articleAuthor(...) // class héritant de article, injection dépendance
}
Je bloque. En plus, comme il y a plusieurs auteurs par article, il me faut un array d'objets author.
C'est quand même un peu obscur php objet. Difficile de trouver des exemples simples sur des cas concrets et courants comme la gestion des jointures, des group_concat
php injection dépendances
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
My website : Mon serveur discord, Se demerder tout seul, Faille XSS et SQL
My website : Mon serveur discord, Se demerder tout seul, Faille XSS et SQL
My website : Mon serveur discord, Se demerder tout seul, Faille XSS et SQL