salut a tou juste pour ma propre culture personnel en poo j'aimerai bien savoir comment creer des facades avec mes classes comme c'est fais sur laravel avec juste la poo.
Merci pour votre precieuse aide

11 réponses


Grafikart
Réponse acceptée

J'ai prévu d'en parler dans mon chapitre sur la poo, même si ce n'est pas un design pattern très conseillé :)

Salut,

Je m'excuse d'avance au près de Grafikart qui je pense voulait traité des façades dans sa formation sur la POO.

Une façade a pour but de cacher une fonctionnalité complexe d'un ou plusieurs objets (c'est une définition).

Pour mieux comprendre voila le problème. Je veux que mon application puisse se connecter a ma base de donnée que je lui demande un utilisateur spécifique de ma base de donnée (User avec l'id 23 par exemple), ensuite je vais les afficher dans un tableau et à la fin je veux créer un fichier de log qui m'écrit la demande faite à la base.

Voila le résultat sans façade.

/**
* Connection a la database
*/
class Database
{
    public function getData($id)
    {
        // requete pour récuperer l'user en $id
    }
}

/**
* Generer du HTML
*/
class Template
{
    // code pour écrire mon tableau

}

/**
* Création d'historique (info de log)
*/
class Logger
{
    // code pour écrire un fichier de log
}

// id a récuperer
$id = 23;

$db = new Database();
$data = $db->getData($id);
$template = new Template($id, $data);
$logger = new Logger();
$logger->log('Création de l\'id' . $id);

echo $template->affiche();

Le soucis avec ça c'est qu'il y a beaucoup de code à écrire
On doit instancier la classe database ensuite template ensuite logger et a chaque fois lui donner des informations au classe, ce qui est chiant.

Donc maintenant on va crée une classe de façade qui va faire tout ça comme cela on va instancier qu'un seule classe et façade fera le reste

<?php 

/**
* Connection a la database
*/
class Database
{

}

/**
* Generer du HTML
*/
class Template
{

}

/**
* Création d'historique (info de log)
*/
class Logger
{

}

/**
* Crée un page et log le résultat
*/
class PageFacade
{
    public function creeretafficher($id, $msg)
    {
        $db = new Database();
        $data = $db->getData($id);

        $template = new Template($id, $data);
        echo $template->affiche();

        $logger = new Logger();
        $logger->log($msg);

    }
}

$page = new PageFacade();

$id = 23;
$msg = 'Création de l\'id' . $id;

$page->creeretafficher($id, $msg)

J'espère que j'ai été clair et désolé pour le long poste pour me faire pardonner une image de patate en forme de coeur

c'est tres claire mes le resulta que j'qimerai bien obtenir c'est un truc dur genre

class User{

    public function hello(){
        echo 'hello world';
    }
}

$user = new User();

$user->hello();
//je veux remplacer ce $user->hello(); par ce qui suit

User::hello();

comme dans laravel vous voyez un peu ?? et merci pour le post et la patate ;)

Rien a voir avec les façades, c'est que "hello" est une methode statique

class User{

    public static function hello(){
        echo 'hello world';
    }
}

// Juste à faire ça
User::hello();

http://www.grafikart.fr/formations/programmation-objet-php/static

-_- le but c'est de pouvoir faire User::hello(); sans que la methode ou la classe ne soit static

Enleve le static et ça fonctionne aussi mais c'est pas très beau

class User{

    public function hello(){
        echo 'hello world';
    }
}

// Juste à faire ça
User::hello();

au fait je veux aboutir au meme resultat qu'a laravel . je sais pas si vous me comprenez ?

Avec tous les élements que je t'ai donné je pense que tu peux t'en sortir

je ne vois pas trop :(

ok donc j'attends la video de Grafikart Merci a tous !