Problème de manipulation en POO

Eléphanteau du PHP | 39 Messages

02 déc. 2011, 21:18

Bonsoir,

J'ai créé une classe Init() qui me permet d'initialiser un ensemble d'éléments tels que l'adresse mail du serveur, le path du fichier de log, ou encore le path des fichiers php.
J'appelle cette classe au tout début de mon fichier index.php.
Dans ce dernier, si je créé un objet de la sorte:
$var = new Init(); 

Puis j'appel une méthode:
$var->getLogLevel();
Cela fonctionnera, seulement j'aimerais pouvoir récupérer la valeur de mon $logLevel sans créé d'objet, comme ceci:
Init::getLogLevel();


En faisant cela j'obtiens cette erreur: "Using $this when not in object context"
Pourriez vous me donner des conseils pour cela fonctionne.

Voici ma classe Init:
class Init{
    
    private $emailserver;
    
    private $logpath;
    
    private $loglevel;

     /**
     * path des fichiers
     */
    private $classpath =array(
        'Membre' => '/membre.class.php',
        'Webmaster' => '/webmaster.class.php',
        'Connexion' => '/connexion.class.php',
        'Tools' => '/tools.class.php',
        'Mail' => '/mail.class.php',
        'Debug' => '/debug.class.php');   
    
    public function __construct() {
        /*
	Respect du standard UTF8
         */
        header('Content-Type: text/html; charset=UTF-8');
        mb_internal_encoding("UTF-8");// indique d'utiliser l'encodage UTF-8
        
        $this->emailserver = "[email protected]";
        $this->logpath = 'c:\log.log';
        $this->loglevel = 1;
        /**
        * Activation des sessions
        **/
        session_start();
    }
    
    //getter
    public function getClassPass(){
        return $this->classpath;
    }
    public function GetClassPath($class){
        return $this->classpath[$class];
    }
    public function getEmailServer(){
        return $this->emailserver;
    }
    public function getLogPath(){
        return $this->logpath;
    }
    public function getLogLevel(){
        return $this->loglevel;
    }
    
    //setter
    public function setEmailServer($email){
        $this->includeClassPath("Mail");
        if(Mail::isMail($email)){
            $this->emailserver = $email;
        }
    }
    public function setGetLogPath($logpath){
        if(is_string($logpath)){
            $this->logpath = $logpath;
        }        
    }
    public function setGetLogLevel($loglevel){
        if(is_int($loglevel)){
            $this->loglevel = $loglevel;
        }
    }
    
    public function includeClassPath($class){
        if(array_key_exists($class, $this->classpath)){
            require_once (dirname(__FILE__) . $this->classpath[$class]);            
        }        
    }
    public function includeAllClassPath(){
        while (list(, $value) = each($this->classpath)) {
            require_once (dirname(__FILE__) .  $value );
        }
    }
    public function showAllClassPath(){
        while (list(, $value) = each($this->classpath)) {
            echo dirname(__FILE__) .  $value . '<br />';
        }
    }
}
Je suis également à l'écoute de vos critiques sur mon code ou si vous avez des conseils à me donner.
Etant débutant en programmation en objet je me doute que je dois faire des bêtises.

Bonne soirée.

Damien B.

ViPHP
xTG
ViPHP | 7331 Messages

02 déc. 2011, 22:39

Tu tentes donc de faire une classe statique ?
http://php.net/manual/fr/language.oop5.static.php

Regardes aussi du côté du design patern "Singleton", cela devrait correspondre à ce que tu recherches : un Getter statique qui instancie l'objet une seule fois et le retourne

Eléphanteau du PHP | 39 Messages

02 déc. 2011, 23:12

Ok, merci pour tes conseils. :)