Salut à tous,
J'essaie d'améliorer mes classes et je me pose une question sur ce que j'ai fait.

J'avais à la base une classe Image_Image me permettant de créer une image (quelle surprise :p ). Dans cette classe se trouvais également des fonctions de traitement d'image.
J'ai donc décider de sortir ces méthode de traitement de la classe de création.

Je me retrouve donc maintenant avec :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
class Image_Image
{
    protected $source //Ressource d'image
    public function __construct(){
    //...
    }
}
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
class Image_Traitement
{
    private $objet;
    public function __construct(img){
        if(!is_object($img)){
            throw new Util_ExceptionHandler('Objet attendu');
        }
        $this->objet = $img;
    }
 
    public function niveauDeGris(){
        imagefilter($this->objet->source,IMG_FILTER_GRAYSCALE);
    }
 
}
J'utilise donc désormais mes classes de la manière suivante

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
$image = new Image_Image(320,240)
// Diverse opération de création d'image
//...
 
$traitement = new Image_Traitement($image)
$traitement->niveauDeGris();
 
$image->display()
Le problème étant que je suis obliger de passer $source de protected à public ce qui ne me convient que moyennement.

Hériter "Traitement" de "Image" peut il être la solution sachant que "Traitement" peut recevoir également des objet des classes fille de "Image" (Reflexion,Degrader...) ?
Peut être y'à il une manière plus propre de procéder ?

Est il possible de savoir à quelle classe appartient un objet ? J'aimerais filtrer les objet accepté par Traitement, histoire qu'il n'accepte pas un objet voiture par exemple.