OVH Cloud OVH Cloud

Fonction globale, c possible ??

9 réponses
Avatar
Marie
Bonjour,
Pour afficher differentes infos sur ma page, j'utilise une fonction dans
laquelle, j'utilise des variables globales déclarées.
Jusque là, tout fonctionne bien.
Le hic, c'est que je souhaiterai, dans cette fonction, appeller une autre
fonction pour effectuer un test.
Ma fonction n'est pas reconnue et je ne sais pas si je peux et comment il
est possible de la déclarer en fonction globale comme mes variables.
Voici un exemple de mon code.

function Mafonction ($param1,$param2) {
Global $Color1; Global $Color2; Global $Color3; Global $Color4; Global
$Color5;
TestSiImageExiste();
// ici le traitement de la fonction Mafonction
}

Merci d'avance.
Marie

9 réponses

Avatar
CrazyCat
Marie wrote:
function Mafonction ($param1,$param2) {
Global $Color1; Global $Color2; Global $Color3; Global $Color4; Global
$Color5;
TestSiImageExiste();
// ici le traitement de la fonction Mafonction
}


C'est étrange car une fonction, si elle est déclarée, est accessible de
partout.

Tu peux utiliser function_exists('TestSiImageExiste') pour vérifier
qu'elle est bien déclarée.
Une erreur habituelle et fréquente est d'oublier d'appeler le fichier
contenant les fonctions.
Et si la fonction existe bien, essaye avec
call_user_function('TestSiImageExiste', '')

--
Découvrez Original War: http://www.original-war.org
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.c-p-f.net

Avatar
loufoque
Marie a dit le 22/03/2005 à 22:12:

function Mafonction ($param1,$param2) {
Global $Color1; Global $Color2; Global $Color3; Global $Color4; Global
$Color5;


On peut faire global $var1, $var2, ..., $varn;
Ensuite, ce serait peut-être mieux d'avoir un tableau contenant
directement toutes les couleurs, non ?
Et puis personnellement, moi je préfere éviter les variables globales.


TestSiImageExiste();
Cette fonction doit avoir été déclarée dans le contexte global pour que

le code fonctionne.

Avatar
Marc

function Mafonction ($param1,$param2) {
Global $Color1; Global $Color2; Global $Color3; Global $Color4; Global
$Color5;
TestSiImageExiste();
// ici le traitement de la fonction Mafonction
}



c'est tres simple, tu crees un fichier contenant tes fonctions communes
par exemple : functions.php

puis dans chaque script tu fais un "include_once('fonctions.php');

il n'y a rien d'autre a faire. Voici en pratique ce que cela donnne :


fonctions.php:
<?php

# a mon avis il devrait y avoir des parametres a cette fonction
function TestSiImageExiste($file){
return false;
}

?>

fichier ma_page.php:
<?php


# indispensable pour eviter les erreurs triviales qui
# sont indiquée automatiquement ; c'est un gage de qualité.
error_reporting(E_ALL);

# attention au chemin d'acces (repertoires)
include_once('fonctions.php');

function principale(){
# blabla
# blabla
# blabla

TestSiImageExiste();

# re-blabla
# blabla
# blabla

}
?>

Avatar
loufoque
CrazyCat a dit le 23/03/2005 à 09:54:
C'est étrange car une fonction, si elle est déclarée, est accessible de
partout.


Ben non.

function foo()
{
echo 'Foo';
function bar()
{
echo 'Bar';
}
bar();
}

bar(); // erreur.

Par contre, si on appelle foo juste avant bar, ça marche.
En fait c'est pas une histoire de contexte, mais d'évaluation de la
déclaration.

Avatar
CrazyCat
loufoque wrote:
CrazyCat a dit le 23/03/2005 à 09:54:

C'est étrange car une fonction, si elle est déclarée, est accessible de
partout.
Ben non.

[Snip de l'aberration]

En fait c'est pas une histoire de contexte, mais d'évaluation de la
déclaration.


Heu, pour quelle raison voudrais-tu définir une fonction dans une autre
fonction? je n'en vois pas l'intérêt.
A priori, une fonction se définit soit de manière globale, soit dans une
classe (et donc, il faut instancier l'objet de la classe).

Il y a peut-être des cas particuliers, mais actuellement je ne vois pas
du tout lesquels.
--
Découvrez Original War: http://www.original-war.org
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.c-p-f.net


Avatar
loufoque
CrazyCat a dit le 23/03/2005 à 13:30:

Heu, pour quelle raison voudrais-tu définir une fonction dans une autre
fonction? je n'en vois pas l'intérêt.


Ça n'en a pas vraiment.
Néanmoins c'est un mécanisme qui existe en C.

Avatar
dmetzler
des fois tu peux en avoir besoin pour par exemple dispatcher une
fonction sur tout un tableau avec la commande array_map. Ca m'embete
d'avoir à déclarer une fonction globale pour ça.

Mais souvent le problème c'est que ta fonction est appelée plusieurs
fois et que du coup php essaye de redéclarer la fonction plusieurs
fois et génère alors une erreur
Avatar
Thierry Boudet
On 2005-03-23, loufoque wrote:


Heu, pour quelle raison voudrais-tu définir une fonction dans une autre
fonction? je n'en vois pas l'intérêt.


Ça n'en a pas vraiment.
Néanmoins c'est un mécanisme qui existe en C.


Non.

--
_/°< coin


Avatar
CrazyCat
loufoque wrote:
Heu, pour quelle raison voudrais-tu définir une fonction dans une autre
fonction? je n'en vois pas l'intérêt.
Ça n'en a pas vraiment.

Néanmoins c'est un mécanisme qui existe en C.


OK, alors sans intérêt par rapport à la question initiale, et risque de
paumer Marie.

--
Découvrez Original War: http://www.original-war.org
Humour: http://www.chatfou.com
Tchattez en liberté: http://www.c-p-f.net