OVH Cloud OVH Cloud

Modulariser les scripts PHP

9 réponses
Avatar
Luc Martineau
Bonjour,

J'aimerais savoir comment vous modularisez vos scripts php.

En lisant la doc, j'ai vu qu'il y a deux fonctions pour inclure des fichiers
dans un script php : require et include.

Je m'apprête donc à faire des trucs de ce genre:


fichier fonction1.php
==================
<?php
fonction1 () {
code...
}
?>
==================

fichier fonction2.php
==================
<?php
fonction2 () {
code...
}
?>
==================

fichier page1.php
==================
<HTML><BODY>
<?php
include 'fonction2.php';
include 'fonction1.php';
?>
</BODY><HTML>
==================


Merci

Luc

9 réponses

Avatar
Nicolas Cavigneaux
Le Thu, 13 May 2004 02:13:35 +0000, Luc Martineau a écrit :

Bonjour,


Bonjour,

J'aimerais savoir comment vous modularisez vos scripts php.


Exactement comme tu le fais dans ton exemple (enfin peut-être pas non
plus une seule fonction par fichier mais c'était un exemple là).

Merci


Avec plaisir,
--
Nicolas Cavigneaux | GPG KeyID : F0954C41
| http://bounga.ath.cx

Avatar
Stephane Thomas
Salut,

Puisse que l'on parle de require() et de include() j'aimerai savoir si
quelqu'un peut m'éclairer sur les différences entre ces deux fonctions
qui d'un point de vue fonctionnel font la même chose ? Parce que voilà
ce que moi j'en ai compris :

require() intègre le code du fichier appelé dans le fichier appelant
avant d'interpréter le fichier appelant.
include() interprète le fichier appelé et stock le résultat en mémoire.

Ce qui fait que require() est plus gourmand en ressources (on
réinterprète à chaque fois) mais sur, tandis que include() et plus
rapide mais plus dur à gérer car il faut penser à la portée de cet appel.

Je sens que je suis peut-être pas très clair là, sinon, j'ai bien
compris ou je retourne RTFM ?

Personnelement j'utilise tout le temps require()

Et require_once() c'est encore différent ?

Stef
Avatar
Luc Martineau
Stephane Thomas wrote:
Salut,


Salut

require() intègre le code du fichier appelé dans le fichier appelant
avant d'interpréter le fichier appelant.
include() interprète le fichier appelé et stock le résultat en mémoire.



Ce que j'avais compris à propos de la différence entre require() et include()
est que require() fait planter le script si le fichier n'est pas là tandis que
l'on a un "warning" avec include().

Ce qui fait que require() est plus gourmand en ressources (on
réinterprète à chaque fois) mais sur, tandis que include() et plus
rapide mais plus dur à gérer car il faut penser à la portée de cet appel.


De plus, on dit que require() et include() sont identiques, sauf dans leur façon
de gérer les erreurs.

http://ca.php.net/manual/fr/function.require.php

Donc j'imagine qu'il n'y a pas de différence à propos de la gourmandise

Personnelement j'utilise tout le temps require()

Et require_once() c'est encore différent ?
Je ne sais pas.



Luc

Avatar
Olivier Miakinen
Le 14/05/2004 04:17, Luc Martineau répondait à Stéphane Thomas :

require() intègre le code du fichier appelé dans le fichier appelant
avant d'interpréter le fichier appelant.
include() interprète le fichier appelé et stock le résultat en mémoire.


http://ca.php.net/manual/fr/function.require.php

Donc j'imagine qu'il n'y a pas de différence à propos de la gourmandise

Et require_once() c'est encore différent ?
Je ne sais pas.



Là encore la réponse est dans la doc.
http://ca.php.net/manual/fr/function.require-once.php

<cit.>
La principale différence est qu'avec require_once(), vous êtes assurés
que ce code ne sera ajouté qu'une seule fois, évitant de ce fait les
redéfinitions de variables ou de fonctions, génératrices d'alertes.
</cit.>


Avatar
Bruno Desthuilliers
Luc Martineau wrote:
Bonjour,

J'aimerais savoir comment vous modularisez vos scripts php.


Comme on peut... A la hache, en général !-)

En lisant la doc, j'ai vu qu'il y a deux fonctions pour inclure des
fichiers dans un script php : require et include.

Je m'apprête donc à faire des trucs de ce genre:


fichier fonction1.php
================= > <?php
fonction1 () {
code...
}
?>
(snip)


Heu... la modularité, c'est bien, mais point trop n'en faut. Une
fonction par fichier, c'est peut-être un poil excessif, non ? Regroupe
les fonctions qui travaillent ensemble, ce sera plus lisible et plus
facile à maintenir.

Par ailleurs, PHP est *très* limité du point de vue des règles de
visibilité et de portée des symboles : c'est ou local à une fonction, ou
global, il n'y a pas de niveau 'module' intermédiaire. C'est assez
chianf quand - comme c'est très souvent le cas - les fonctions
'publiques' d'un module (celles destinées à être appelées de
l'exterieur) ont besoin de partager des fonctions ou des variables
d'état qui ne concernent pas le code appelant, puisque ces fonctions et
variables seront globalement accessibles.

Les deux solutions existantes sont :
- avoir un ensemble de conventions claires et documentées (ex : toutes
les fonctions et variables d'un module commencent par un prefix commun,
tout ce qui relève de l'implémentation du module est en plus préfixé
par un '_', et le code appelant fait comme s'il ne connaissait pas ce
qui commence par un '_')
- utiliser des classes, ne serait-ce que comme espace de nommage
intermédiaire entre le niveau global et le niveau local. Ce n'est pas
réellement de la POO au sens où on le comprend aujourd'hui, mais bon,
les classes sont quand même, historiquement, une extension du concept de
'module' (une classe étant - si on fait abstraction des autres concepts
objet - un module instanciable).

Personnellement, je privilégie en général la seconde solution.

Bruno

Avatar
Bruno Desthuilliers
Stephane Thomas wrote:
Salut,

Puisse que l'on parle de require() et de include() j'aimerai savoir si
quelqu'un peut m'éclairer sur les différences entre ces deux fonctions
qui d'un point de vue fonctionnel font la même chose ? Parce que voilà
ce que moi j'en ai compris :

require() intègre le code du fichier appelé dans le fichier appelant
avant d'interpréter le fichier appelant.
include() interprète le fichier appelé et stock le résultat en mémoire.

Ce qui fait que require() est plus gourmand en ressources (on
réinterprète à chaque fois) mais sur, tandis que include() et plus
rapide mais plus dur à gérer car il faut penser à la portée de cet appel.

Je sens que je suis peut-être pas très clair là, sinon, j'ai bien
compris ou je retourne RTFM ?


PAQJS, et après avoir re RTFM, les deux fonctionnent exactement de la
même façon, à l'exception du niveau d'erreur généré si le fichier n'est
pas trouvé (warning pour un include, erreur pour un require).

Personnelement j'utilise tout le temps require()


Personnellement, j'utilise require_once pour les dépendances (ex:
utilisation d'une bibliothèque de fonctions/classes, donc indispensable)
et (plus rarement) include ou include_once pour des fichiers de config
ou assimilés.

Et require_once() c'est encore différent ?


require_once et include_once, comme leur nom l'indique, n'appellent
qu'une fois chaque fichier inclus. Cela permet de gérer simplement les
problèmes d'inclusions multiples

ex : un script depend de deux bibliothèques de fonctions qui dépendent
toutes deux d'une (même) troisième bibliothèque... Si les deux biblio
utilisent require pour inclure la troisième, tu va avoir une erreur de
redéfinition de symbole (ceux définis dans la troisième bibliothèque),
alors qu'avec require_once la troisième bibliothèque sera appelée une
fois seulement.

HTH
Bruno

Avatar
Luc Martineau
Stephane Thomas wrote:
Salut,
Salut


Puisse que l'on parle de require() et de include() j'aimerai savoir si
quelqu'un peut m'éclairer sur les différences entre ces deux fonctions
qui d'un point de vue fonctionnel font la même chose ? Parce que voilà
ce que moi j'en ai compris :

require() intègre le code du fichier appelé dans le fichier appelant
avant d'interpréter le fichier appelant.
include() interprète le fichier appelé et stock le résultat en mémoire.


Ce que j'avais compris à propos de la différence entre require() et include()
est que require() fait planter le script si le fichier n'est pas là tandis que
l'on a un "warning" avec include().



Ce qui fait que require() est plus gourmand en ressources (on
réinterprète à chaque fois) mais sur, tandis que include() et plus
rapide mais plus dur à gérer car il faut penser à la portée de cet appel.


De plus, on dit que require() et include() sont identiques, sauf dans leur façon
de gérer les erreurs.

http://ca.php.net/manual/fr/function.require.php

Donc j'imagine qu'il n'y a pas de différence à propos de la gourmandise :-)


Et require_once() c'est encore différent ?
Je sais pas.




Luc

Avatar
Sam
include est a préférer lors des tests conditionnels / boucles.

genre :

if($toto = "titi")
{
include("titi.inc.php");
}

ou encore :

switch($toto)
{
case "titi" : include("titi.inc.php");
case "tata" : include("tata.inc.php");
}

je crois que require est interprété lors de la compilation, alors que
include non, ou un truc dans le genre ;-)
Les puristes confirmeront :-D

"Stephane Thomas" a écrit
Puisse que l'on parle de require() et de include() j'aimerai savoir si
quelqu'un peut m'éclairer sur les différences entre ces deux fonctions
qui d'un point de vue fonctionnel font la même chose ?


Avatar
Stephane Pineau
Le 18 May 2004 12:56:19 GMT, Sam <poubsam&nospam&@free.fr> écrivait:

if($toto = "titi")
if ($toto=="titi")

^
switch($toto)
{
case "titi" : include("titi.inc.php");
case "tata" : include("tata.inc.php");
}


Rappel : ne jamais oublier (même dans un exemple, sinon ca en devient un
mauvais:-) de traiter le cas par défaut d'un switch, même si on est
convaincu à 100% d'avoir détaillé tous les cas de figure dans les case....
On peut être sur qu'à 101% on aura eu tort:-)

Cdlt,
Stéph'

--
AcroDict : Dictionnaire francophone des acronymes informatiques
<URL:http://www.teaser.fr/~spineau/acrodict/index.htm>
PHP Page : Script PHP3 Gratuits (Forum, Gestionnaires BDD, etc..)
<URL:http://steph.pineau.free.fr/php/index.php>