PHP Quebec
http://www.phpquebec.com
PHP.net
PHP Québec
Mission
L'équipe
Nos projets
Contact
Ressources
Forum
Recherche

Advanced Search
Qui est en ligne
12 user(s) are online (3 user(s) are browsing Forum)

Members: 0
Guests: 12

more...

Browsing this Thread:   1 Anonymous Users





Drôle de comportement de variable global
Nouveau
Joined:
2008/11/27 8:42
Group:
Utilisateurs Enregistrés
Posts: 2
Level : 1; EXP : 2
HP : 0 / 0
MP : 0 / 3
Offline
Je travail sur une extension pour Wordpress (ma première).
Cette extension permet de trouver un emplacement près de chez vous calculé par distance parcourue, ce qui évite le bug du bureau juste l'autre côté de la rivière.

J'ai de la difficulté avec une variable globale qui semble perdre sa valeur quelque part... mais où ?

Voici l'extraît de code problématique :


[CODE]
$gm_api_version = "1.0";
$gm_table = "google_mapper";


function gm_install ()
{
global $wpdb, $gm_table, $gm_api_version;

$table_name = $wpdb->prefix . $gm_table /*"google_mapper"*/;
if($wpdb->get_var("show tables like '$table_name'") != $table_name)
{
$sql = "CREATE TABLE " . $table_name . " (
gm_id BIGINT( 20 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
gm_name VARCHAR( 100 ) NOT NULL,
gm_address VARCHAR( 255 ) NOT NULL,
gm_address2 VARCHAR( 255 ) NOT NULL,
gm_city VARCHAR( 75 ) NOT NULL,
gm_state CHAR( 64 ) NOT NULL,
gm_country CHAR( 255 ) NOT NULL,
gm_zip VARCHAR( 10 ) NOT NULL,
gm_lat DOUBLE NOT NULL,
gm_lon DOUBLE NOT NULL,
gm_publish VARCHAR( 3 ) NOT NULL,
gm_stamp TIMESTAMP NOT NULL
);";

require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
add_option("gm_api_version", $gm_api_version);
add_option("gm_new_database", $sql);
}
}
[/CODE]



Ce code semble suivre les directives de Wordpress.org.

$gm_table et $gm_api_version perdent leur valeur mais $wpdb n'as pas de problème. Ma table créé porte donc le nom de "wp_" plutôt que "wp_google_mapper".

Dans une autre fonction, j'utilise exactement le même code et tout fonctionne bien :



[CODE]
function gm_manage_locations() {
global $wpdb, $gm_table;

echo "

" . $gm_table . "

";
[/CODE]



Dans le dernier exemple le titre affiche "google_mapper", ce qui est la bonne valeur.

Me voilà bien perplexe face à ce problème, j'imagine que c'est une erreur de ma part mais je n'arrive pas à trouver ce qui est défectueux dans le code.

Merci à toute la communauté pour votre support. J'ai bien hâte de vous rencontrer lors de la rencontre de Décembre.

Posted on: 2008/11/27 9:56
Transfer the post to other applications Transfer


Re: Drôle de comportement de variable global
Nouveau
Joined:
2008/11/17 13:22
Group:
Utilisateurs Enregistrés
Posts: 8
Level : 1; EXP : 73
HP : 0 / 18
MP : 2 / 91
Offline
Bonjour, j'ai essayé ton code et voici ce que j'ai pu voir:


Comportement 1: le fichier est inclus à l'intérieur d'une fonction. Par exemple, si le fichier s'appelle 'gm.php';

function uneFonction() {
  include 
'gm.php';

  
gm_install();
}


Dans ce cas, les variables $gm_api_version et $gm_table sont déclarées dans la fonction "uneFonction" et ne sont pas globales.

Solution: utiliser la syntaxe avec $GLOBALS pour s'assurer que les variables soient accessibles via le mot clé globals.

$GLOBALS['gm_api_version'] = "1.0";
$GLOBALS['gm_table'] = "google_mapper"



Comportement 2: la fonction gm_install() est appelée dans le même fichier que la déclaration, mais avant les affectations des variables $gm_api_version et $gm_table.

Exemple:
gm_install();
$gm_api_version "1.0";
$gm_table "google_mapper";

function 
gm_install ()
{
...
}


Je ne crois pas que ça soit le cas, car wordpress est modulaire, mais c'est une possibilité.



Posted on: 2008/11/30 23:55
Transfer the post to other applications Transfer


Re: Drôle de comportement de variable global
Nouveau
Joined:
2008/11/27 8:42
Group:
Utilisateurs Enregistrés
Posts: 2
Level : 1; EXP : 2
HP : 0 / 0
MP : 0 / 3
Offline
Merci pour la solution, cela m'éclair et fait du sens.

Tout devrait fonctionner maintenant.

Je serai à la rencontre mensuelle ce 4 décembre, j'espère pouvoir vous remercier en personne.

Merci pour tout.

Posted on: 2008/12/1 10:10
Transfer the post to other applications Transfer


Re: Drôle de comportement de variable global
Nouveau
Joined:
2008/11/17 13:22
Group:
Utilisateurs Enregistrés
Posts: 8
Level : 1; EXP : 73
HP : 0 / 18
MP : 2 / 91
Offline
Je ne vais pas aux rencontres. C'est trop loin Montréal pour moi (250 Km).

Posted on: 2008/12/1 14:39
Transfer the post to other applications Transfer






You can view topic.
You cannot start a new topic.
You cannot reply to posts.
You cannot edit your posts.
You cannot delete your posts.
You cannot add new polls.
You cannot vote in polls.
You cannot attach files to posts.
You cannot post without approval.

[Advanced Search]


Evènements à venir
Connexion
Username:

Password:


Lost Password?

Register now!
Canal IRC
Venez nous voir sur notre canal IRC avec votre client favori :

irc.phpquebec.org
canal : #phpquebec
Membre de
Hébergé par
Nexen Services