étendre la classe pdo

ViPHP
ViPHP | 3607 Messages

28 nov. 2008, 18:23

Bonjour à tous,
J'ai quelques soucis lorsque j'essaye d'étendre la classe pdo, je sohaite faire une classe de gestion de pagination, et je souhaite étendre la classe pdo afin de pouvoir utiliser n'importe quelle sgdb, mais je bloque au tout début, rien que pour la fonction __construct()...
Commen faut-il procéder?
class pagination extends PDO {
    public function __construct($dsn,$user,$pass,$lerestedessargumentsinutilesaPDO){
       $this->ressourceConnexion= parent::__construct($dsn,$user,$pass);
       //exemple d'utilisation sql
       if(uft8){
            $this->ressourceConnexion->query('SET NAMES UTF8');
       }

   }
}
Bon c'est un peu n'improte quoi le code ci-dessus, mais est-ce que dans le principe, c'est ça?
Je suis un peu perdu.... :(
Est-ce que c'est dans l'esprit POO ou pas ?

Mammouth du PHP | 1668 Messages

28 nov. 2008, 20:05

Bonjour,

déjà, tu mélange un exemple et ta classe, ensuite, je trouve pas ça logique de mélanger un système de traitement des données et un système de gestion des données, mais peut-être que je me trompe...
"À ceux qui poursuivent leurs rêves et se spécialisent dans l'impossible" Joseph Kong

10 ans de PHP, déjà.

"moi jtrouve que katagoto il déchire!" Nagol

ViPHP
ViPHP | 3607 Messages

28 nov. 2008, 20:30

Euh je mélange pas d'exemple avec ma classe, le code d'exemple d'utilisation de la conenction fait partie de ma class, et là-dessus je fait pas fausse routte, enfin je pense pas...
Et pour la logique, est-ce qu'a ton avis il est judicieux de faire un code comme ceci: http://www.phpfrance.com/forums/voir_sujet-8874.php au sein d'un projet d'envergure, o`u la pagination peut se retrouver sur chaque page du site etc...
ça fait beaucoup de code à réécrire...
(note que je critique pas du tout le code, je m'en suis d'ailleurs largement inspiré ;) et c'est très bien fait)

C'est pour celà que j'ai créer une classe pour ceci (elle fonctionne d'ailleurs très bien en l'état actuel des choses), mais jusqu'a maintenant, la partie sgdb était externe à la classe, et je souhaite l'intégrer pour avoir plus de souplesse dans le choix des sgdb...
Voilà pour la petite histoire, je vais peut-être posté la classe dans l'état et je ferai une maj plus tard lorsque j'aurais réussit à étendre PDO

Eléphant du PHP | 99 Messages

28 nov. 2008, 20:53

Ce que je ne comprends pas, c'est la raison pour laquelle tu souhaite intégrer PDO directement dans ta classe Pagination ?! Ne serait-t'il pas plus simple (et plus performant, php n'ayant pas à dupliquer la classe PDO) de faire quelque chose de ce style:
class Pagination {
	var $link = null;
	
	public function __construct( ... )
	{
		$this->link = new PDO( ... );
	}
	
	public function machin()
	{
		$this->link->query('...');
	}
}

ViPHP
ViPHP | 3607 Messages

28 nov. 2008, 21:14

C'est vrai, que ça serait surement plus simple...
Mais c'est le grand maitre Cyrano qui m'a enduit d'erreur!
Un autre point que je n'utilise absolument jamais, c'est "global" : je préfère de très loin envoyer un objet en paramètre. Mais l'idée la plus simple consisterait à étendre la classe de connexion avec la classe de pagination. De cette manière, on dispose de toutes les méthodes de la classe de connexion et on ajoute les méthodes de pagination.
Après à voir, quelle solution serait plus efficace...

Eléphant du PHP | 99 Messages

28 nov. 2008, 22:21

Ben disons qu'à mon avis, étendre une classe n'est utile que si la classe enfant à la même finalité que la classe parente: je ne me verrais pas faire une classe de moteur de templates héritant de PDO, ni faire une classe de gestion de tableaux après avoir étendu DOMXML.

Après, je ne sais pas ce que tu veut en faire, donc peut-être qu'il s'agit de la meilleur façon de procéder, mais je ne comprends pas pourquoi. :/

Et légèrement HS mais tant pis: on n'enduit pas d'erreur, on induit en erreur :mrgreen:

ViPHP
ViPHP | 3607 Messages

28 nov. 2008, 22:57

Et légèrement HS mais tant pis: on n'enduit pas d'erreur, on induit en erreur :mrgreen:
C'est pour ça que je l'avais mis en italique ;)
Bon pour le reste, on attend soit l'avis d'autres personnes, soit que je poste la classe en question dans le forum vos contributions... !

EDIT: bon alors pour l'instant, j'ai fait ceci:
public function __construct(....,$conParam){
                if(is_resource($conParam)){//permet de passer une ressource à la classe, si la connexion est déjà active
			$this->connexion=$conParam;
		} elseif(is_array($conParam)){
			$this->connexion=new PDO($conParam['dsn'], $conParam['user'], $conParam['pass']);
			if(isset($conParam['useUtf8']) && $conParam['useUtf8']==true){
				$this->connexion->query('SET NAMES utf8');
			}
		}
}
Vos avis?