2010-01-17 3 views
4

Est-ce qu'une CONSTANTE PHP globale est disponible dans un fichier Class?Est-ce qu'une CONSTANTE PHP globale est disponible dans un fichier Class?

define('SITE_PATH', 'C:/webserver/htdocs/somefolder/'); 

Puis dans mon dossier de classe I try this

public $debug_file = SITE_PATH. 'debug/debug.sql'; 

Cela ne semble pas fonctionner bien,

Parse error: parse error, expecting ','' or ';'' in C:\webserver\htdocs\somefolder\includes\classes\Database.class.php on line 21

Répondre

3

Vous ne pouvez pas avoir d'expression dans une déclaration de classe.

je suggère passer le chemin:

public function __construct($path) 
{ 
    $this->debug_path = $path; 
} 

Cela vous donne plus de flexibilité si jamais vous voulez changer le chemin, vous ne devez pas changer une constante, tout ce que vous passez

.

Vous pouvez également créer plusieurs objets ayant tous des chemins différents. C'est utile s'il s'agit d'une classe de chargement automatique, car vous voudrez peut-être charger plusieurs répertoires.

$autoloader = new Autoload(dirname(SYS_PATH)); 
$autoloader->register_loader(); 

class Autoload 
{ 
    public $include_path = ""; 

    public function __construct($include_path="") 
    { 
     // Set the Include Path 
     // TODO: Sanitize Include Path (Remove Trailing Slash) 
     if(!empty($include_path)) 
     { 
      $this->include_path = $include_path; 
     } 
     else 
     { 
      $this->include_path = get_include_path(); 
     } 

     // Check the directory exists. 
     if(!file_exists($this->include_path)) 
     { 
      throw new Exception("Bad Include Path Given"); 
     } 
    } 
    // .... more stuff .... 
} 
+1

Et les commentaires signifient que je vous ai donné le code source de mon projet au lieu de le recréer. Yay! –

+0

bonne chose, merci – JasonDavis

+0

get_include_path() peut renvoyer plusieurs chemins séparés par le séparateur de chemin spécifique du système d'exploitation. Ainsi, votre appel à file_exists échouera si plusieurs chemins sont définis, mais sont des chemins valides individuellement. –

2

Vous ne pouvez pas utiliser l'expression (.) Dans initialiseur sur le terrain. See example one in PHP manual

+0

Je vois, donc je devrais fondamentalement créer UNE AUTRE nouvelle constante avec le chemin complet de mon fichier de débogage? – JasonDavis

+0

Eh bien .. vous pouvez .. il doit juste contenir des chaînes littérales. –

+0

et @Jasondavis, Oui. Mais vous pourriez juste, lors de l'initialisation de la classe, passer un chemin. Cela vous permettrait d'utiliser plusieurs chemins (plusieurs objets) ou de changer le chemin plus tard. –

4

Je seconde ce que les autres ont dit. Comme $ debugFile semble être une dépendance optionnelle, je suggère d'initialiser un défaut par défaut lors de la création de la classe et de permettre ensuite de la changer par une injection de setter si nécessaire, par ex. Notez que l'injection de SITE_PATH, au lieu de le coder en dur, serait une meilleure pratique.

Questions connexes