1. Trang chủ
  2. » Công Nghệ Thông Tin

Pratique de MySQL et PHP- P33 potx

5 270 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Pratique de MySQL et PHP
Trường học Standard University
Chuyên ngành Computer Science
Thể loại Thesis
Năm xuất bản 2023
Thành phố Paris
Định dạng
Số trang 5
Dung lượng 160,51 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

La notion d’interface est un peu plus générale dans la mesure ó elle est définie indépendamment de toute classe, donc de toute instance.. 3.2 LA CLASSE TABLEAU La classe présentée dans c

Trang 1

138 Chapitre 3 Programmation objet

t r y {

i f ( i s S e t ( $_GET [ ’ p o s t g r e s q l ’ ] ) )

$bd = new BDPostgreSQL (NOM, PASSE , BASE , SERVEUR) ;

e l s e i f ( i s S e t ( $_GET [ ’ s q l i t e ’ ] ) )

$bd = new BDSQLite (NOM, PASSE , BASE , SERVEUR) ;

e l s e

$bd = new BDMySQL (NOM, PASSE , BASE , SERVEUR) ;

$ r e s u l t a t = $bd−>execRequete ( "SELECT ∗ FROM FilmSimple " ) ;

w h i l e ( $ f i l m = $bd−>o b j e t S u i v a n t ( $ r e s u l t a t ) )

echo " <b> $ f i l m−> t i t r e </ b > , paru en $film −>annee , "

" r é a l i s é p a r $ f i l m−>p r e n o m _ r e a l i s a t e u r $film −>

n o m _ r e a l i s a t e u r < b r / > " ; }

c a t c h ( E x c e p t i o n $ e x c )

{

echo " <b> E r r e u r r e n c o n t r é e : < / b> " $exc−>g e t M e s s a g e ( ) "\n " ;

}

? >

</ body >

</ html >

Si on passe une variable postgresql en mode GET, c’est à PostgreSQL qu’on se connecte, sinon c’est à MySQL, ou à SqLite, etc Dans une application importante, détaillée dans la seconde partie de ce livre, on peut instancier initialement un objet

en choisissant le SGBD à utiliser, et le passer ensuite en paramètre aux fonctions ou objets qui en ont besoin Ceux-ci n’ont alors plus à se soucier de savoir à quel système ils accèdent, tant qu’ils se conforment au comportement de la classe générique

REMARQUE –Écrire une application multi-plateformes demande cependant quelques pré-cautions supplémentaires Il existe de nombreuses différences mineures entre les différents SGBD qui peuvent contrarier, et parfois compliquer, la production d’un code complètement compatible La première précaution à prendre (nécessaire, mais par forcément suffisante ) est

de respecter strictement la norme SQL du côté SGBD Il faut ensuite étudier soigneusement les interfaces entre PHP et le SGBD pour détecter les points susceptibles de poser problème.

Le fait que l’interface de PostgreSQL traduise tous les identificateurs en minuscules est par exemple une source d’incompatibilité à prendre en compte dès la conception, en n’utilisant que des identificateurs déjà en minuscules Nous revenons en détail page 233 sur le problème

de la portabilité multi-SGBD.

3.1.6 Résumé

Ce premier tour d’horizon a permis de voir l’essentiel des principes de la programma-tion objet Si c’est votre premier aperçu de cette technique, il est probable que vous trouviez tout cela compliqué et inutilement abstrait À l’usage, la cohérence de cette approche apparaît, ainsi que ses avantages, notamment en terme sde simplification

de la programmation et de la maintenance Il n’est pas obligatoire de programmer

Trang 2

en objet pour réaliser des applications robustes, et on peut envisager de ne pas maỵtriser l’ensemble de la panoplie des concepts et techniques La programmation PHP s’oriente cependant de plus en plus vers l’utilisation et la réutilisation d’objets prêts à l’emploi La compréhension de ce mode de production du logiciel semble donc s’imposer

Les exemples qui vont suivre permettent d’approfondir cette première présenta-tion et de présenter quelques nouveautés qui sont brièvement résumées ci-dessous pour compléter cette première section

Constantes Il est possible en PHP 5 de définir des constantes locales à une classe.

L’usage est principalement d’initialiser des valeurs par défaut utilisables par la classe et ses sous-classes

Propriétés et méthodes statiques Les méthodes ou propriétés vues jusqu’à présent

étaient toujours considérées dans le cadre d’un objet de la classe Chaque objet dispose d’une valeur propre pour chaque propriété, et les méthodes appliquées

à un objet s’appliquent à ces valeurs Les propriétés et méthodes statiques sont

au contraire rattachées à la classe, pas à chacune de ses instances Il en existe donc une unique copie par classe, utilisable, par exemple, pour compter le nombre d’objets instanciés à un moment donné

Interfaces Une interface, comme son nom l’indique, est la spécification d’une liste

de fonctions avec leur nom et leur mode d’appel Une classe abstraite propose le même type de spécification, implicitement destinée à s’appliquer aux instances

de la classe La notion d’interface est un peu plus générale dans la mesure ó elle est définie indépendamment de toute classe, donc de toute instance Une

classe peut alors implanter une ou plusieurs interfaces L’utilisation des interfaces

permet de pallier en partie l’absence de concepts comme l’héritage multiple Il s’agit cependant de techniques avancées qui dépassent le cadre de ce livre et ne seront donc pas détaillées

Identité d’un objet Un objet, c’est une identité et une valeur Deux objets sont dits

identiques s’ils ont la même identité, et égaux s’ils ont la même valeur L’égalité se

teste avec l’opérateur classique ==, alors que l’identité se teste avec l’opérateur PHP5 ===1

Important : quand on passe un objet en paramètre à une fonction, c’est son

identité (ou sa référence, en terminologie PHP) qui est transmise, pas sa valeur

De même l’affectation $a = $b;, ó b est un objet, fait de a une référence vers b (voir page 61) Les objets constituent donc une exception au principe de passage des paramètres par valeur en usage dans tous les autres cas Concrètement, cela signifie que toute modification effectuée dans la fonction appelée agit directement sur l’objet, pas sur sa copie Cette règle ne vaut que depuis la version 5, puisque PHP 4 (et versions antérieures) appliquaientt la règle du passage par valeur

1 Ceux qui confondraient déjà l’opérateur d’affectation = et l’opérateur de comparaison == apprécieront !

Trang 3

140 Chapitre 3 Programmation objet

Classes cibles L’opérateur :: permet dans certains cas d’indiquer explicitement la classe dans laquelle chercher une définition La syntaxe est NomClasse::d´efinition, ó d´efinition est soit une constante de la classe NomClasse, soit une propriété ou une méthode statique Deux mot-clés réservés peuvent remplacer NomClasse : parent et self qui désignent respectivement

la classe parent et la classe courante Quand une méthode est surchargée, ils peuvent indiquer quelle version de la méthode on souhaite appeler (voir par exemple page 128)

Le chapitre 11 complète cette rapide présentation et donne l’ensemble de la syntaxe objet de PHP En ce qui concerne la modélisation des applications objet, rappelons que tout ce qui précède est repris, en PHP, d’autre langages orientés-objet, notamment du C++ et, dans une moindre mesure de Java Pour aller plus loin dans l’approfondissement de la programmation objet, vous pouvez recourir à un ouvrage généraliste consacré au C++, à Java, ou à la conception objet en géné-ral

3.2 LA CLASSE TABLEAU

La classe présentée dans cette section montre comment concevoir et réaliser un utilitaire de production de tableaux HTML qui évite d’avoir à multiplier sans cesse,

au sein du code PHP, des balises <tr>, <td>, etc Un tel utilitaire prend place dans

une stratégie générale de séparation du code HTML et du code PHP sur laquelle nous reviendrons au chapitre 5

La première chose à faire quand on projette la création d’une nouvelle classe, c’est de bien identifier les caractéristiques des objets instances de cette classe, leur représentation, les contraintes portant sur cette représentation, et enfin les méthodes publiques qu’ils vont fournir À terme, ce qui nous intéresse, c’est la manière dont on va pouvoir communiquer avec un objet

3.2.1 Conception

Le but est de produire des tableaux HTML Il faut pour cela les construire dans l’objet, en attendant de pouvoir afficher par la suite le code HTML correspondant Pour commencer, il faut se faire une idée précise de ce qui constitue un tableau et des options de présentation dont on veut disposer On cherche le meilleur rapport possible entre la simplicité de l’interface des tableaux, et la puissance des fonction-nalités On peut commencer par identifier les besoins les plus courants en analysant quelques cas représentatifs de ce que l’on veut obtenir, puis spécifier les données et traitements nécessaires à la satisfaction de ces besoins

Les tableaux sont très utilisés en présentation de données statistiques Prenons

le cas d’une base d’information sur la fréquentation des films (aou « box office » pour faire court), classée selon divers critères comme les villes et la semaine d’ex-ploitation, et voyons les différentes possibilités de représentation par tableau La

Trang 4

première possibilité est simplement de mettre chaque donnée en colonne, comme ci-dessous

Tableau 3.2 — Tableau A.

Film Semaine Ville Nb entrées

C’est la représentation qu’on obtient classiquement avec un SGBD relationnel comme MySQL Elle est assez peu appropriée à la visualisation des propriétés du jeu

de données (comme l’évolution du nombre d’entrées, ou les proportions entre les différents films) Voici une seconde possibilité qui montre, sur Paris, et par film, le nombre d’entrées au cours des différentes semaines

Tableau 3.3 — Tableau B.

Box office Semaine 1 Semaine 2 Semaine 3

On s’est ici limité à deux dimensions, mais des artifices permettent de présenter des tableaux de dimension supérieure à 2 Voici par exemple une variante du tableau

précédent, montrant les mêmes données sur Paris et sur Caen, ce qui donne un

tableau à trois dimensions

Tableau 3.4 — Tableau C.

Box office Film Semaine 1 Semaine 2 Semaine 3

Bien entendu on pourrait présenter les entrées dans un ordre différent, comme dans l’exemple ci-dessous

Trang 5

142 Chapitre 3 Programmation objet

Tableau 3.5 — Tableau D.

Box office Semaine 1 Semaine 2 Semaine 3

Une possibilité encore :

Tableau 3.6 — Tableau E.

Paris

Semaine 1 Semaine 2 Semaine 3

Caen

Semaine 1 Semaine 2 Semaine 3

Tous ces exemples donnent dans un premier temps un échantillon des possibilités

de présentation en clarifiant les caractéristiques des données qui nous intéressent Ces deux aspects, présentation et données, sont en partie indépendants puisqu’à partir du même box office, on a réussi à obtenir plusieurs tableaux très différents L’étape suivante consiste à décrire dces tableaux de manière plus abstraite Pour

les données, nous pouvons distinguer les dimensions, qui servent au classement, et les mesures qui expriment la valeur constatée pour une combinaison donnée de

dimensions2 Dans les exemples ci-dessus, les dimensions sont les films, les villes, les semaines, et la seule mesure est le nombre d’entrées Autrement dit, le nombre d’entrées est fonction d’un film, d’une ville, et d’une semaine

Veut-on gérer plusieurs mesures, c’est-à-dire présenter plusieurs valeurs dans une même cellule du tableau ? On va répondre « non » pour simplifier D’une manière

générale on a donc une fonction M qui prend en paramètres des dimensions

d1, d2, , d p et renvoie une mesure m On peut gérer cette information grâce à

un tableau PHP multi-dimensionnel $M[d1][d2] .[d p] À ce stade il faut se demander si cela correspond, de manière suffisamment générale pour couvrir largement les besoins, aux données que nous voudrons manipuler Répondons

« oui » et passons à la présentation du tableau

Un peu de réflexion suffit à se convaincre que si l’on souhaite couvrir les pos-sibilités A, B, C, D et E ci-dessus, l’utilisation de la classe deviendra assez difficile pour l’utilisateur (ainsi bien sûr que la réalisation du code, mais cela importe moins puisqu’en principe on ne fera l’effort une fois et on n’y reviendra plus) Le cas du

2 Cette modélisation reprend assez largement la notation, le vocabulaire et les principes en usage dans les entrepôts de données, supports privilégiés de ce type de tableaux statistiques.

Ngày đăng: 06/07/2014, 00:20