Page 1 sur 1

Accès à une variable externe dans une méthode

Posté : 15 oct. 2010, 13:21
par VaN
Bonjour,

Tout d'abord, j'utilise un fichier sql_tables.php, que j'inclue tout en haut de mon index.php, et qui ressemble à ceci :
<?php
$tables["cards"]                         = $config["db_prefixe"]."cards";
$tables["config"]                         = $config["db_prefixe"]."config";
?>
Cela me permet de pouvoir modifier le noms de mes tables simplement, à un seul endroit, sans avoir à le modifier dans chaque requête.

Et j'ai une classe Card :
class Card {

    //--- Class Attributes
    var $id;
    var $value;
    var $color;

    //--- Class Constants
    var $const_image_path    = "../images/cards/";
    
    // --------------------------------------------------------------------
    //--- Constructor
    function  __construct($value, $color) {
        $this->value = $value;
        $this->color = $color;
        
        $this->id = sql_query(sprintf("SELECT card_id FROM ".$tables["cards"]." WHERE card_value = '%s' AND card_color = '%s'", $this->value, $this->color), true);
    } 
    
    // --------------------------------------------------------------------
    //--- Clear Method
    function clear() {
        $this->id = 0;
        $this->value = "";
        $this->color = "";
    }
    
    // --------------------------------------------------------------------
    //--- Display Method
    function display() {
        echo "<img src=\"".$const_image_path.$this->value.$this->color."\" alt=\"".$this->value.$this->color."\" />";
    }
}
Dans le constructor, je vais chercher l'identifiant de la carte, en fonction de sa valeur et de sa couleur, fournies au moment de l'instanciation :
$card = new Card("K", "s");
Et dans cette requête, j'utilise évidemment la variable définie dans mon fichier de tables, $tables["cards"].

Mais je reçois l'erreur suivante :
Notice: Undefined variable: tables in D:\www\Projects\poker\common\classes\class.card.php on line 29
Mais si je rajoute un "global $tables;" en début de méthode, plus de problème.

Est-ce que cela veut dire que je vais devoir ajouter un "global $tables;" dans chacune des mes méthodes de chacune de mes classes qui font appel à une requête SQL ? Il n'y a pas un moyen de simplifier tout cela ?

Re: Accès à une variable externe dans une méthode

Posté : 15 oct. 2010, 13:27
par stealth35
regarde du coté des Registry :wink: , sinon il faut passé ta config dans le constructeur

Re: Accès à une variable externe dans une méthode

Posté : 15 oct. 2010, 15:48
par jojolapine
Ou encore utiliser des constantes...
define('TABLE_CARDS', $config["db_prefixe"]."cards");
define('TABLE_CONFIG', $config["db_prefixe"]."config");