Passer des variables à un objet avec une méthode statique

TheFlameflo

TheFlameflo Le 29 juillet 2016 à 19:56 (Édité le 25 janvier 2019 à 17:52)

Salut !

J'ai un petit problème.

Je souhait créer un autoloader à partir d'une méthode statique.
J'aimerais évite d'instancier l'objet, voici ce que je faisais avant :
  • J'instancie l'objet avec les paramètres
  • J'appelle la méthode register()
Voici le code :
namespace Framework;

class Autoloader
{

    private $_namespace;
    private $_path;


    public function __construct($namespace, $path)
    {
        $this->_namespace = $namespace;
        $this->_path = $path;
    }

    public function register()
    {
        spl_autoload_register(array(__CLASS__ , 'loadClass'));
    }

    public function loadClass($class)
    {
        if(preg_match('/^' . $this->_namespace . '/', $class))
        {    
            $namespaceLength = strlen($this->_namespace);
            $class = substr($class, $namespaceLength);
            require $this->_path . '\\' . $class . '.php';
        }
    }
}

Appel de la méthode et instanciation de l'objet :
$autoloader = new Autoloader('MonNamespace', 'lechemin/');
$autoloader->register();
Voici ce que je souhaite faire :

  • Appel statique de register avec en paramètres le namespace et le chemin
Le code pour le moment :

namespace Framework;

class Autoloader
{

    private $_namespace;
    private $_path;

    public static function register($namespace, $path)
    {    
        // Comment faire en sorte que ces deux variables passent à loadClass ?
        $this->_namespace = $namespace;
        $this->_path = $path;
        spl_autoload_register(array(__CLASS__ , 'loadClass'));
    }

    public function loadClass($class)
    {    
        //Utilisation des variables
        if(preg_match('/^' . $this->_namespace . '/', $class))
        {    
            $namespaceLength = strlen($this->_namespace);
            $class = substr($class, $namespaceLength);
            require $this->_path . '\\' . $class . '.php';
        }
    }


    
}

Je sais qu'on ne peut pas passer des variables vu que ce n'est pas une instance d'Autoloader, mais j'aimerais savoir comment je pourrais passer les variables malgré tout !

Pouvez-vous m'aider et me guider ?
Merci d'avance à tous !

PS : Je sais que j'ai mis $this dans le code, je sais que ce n'est pas logique vu que ce n'est pas une instance, mais c'est en exemple ! 😀
TheFlameflo

TheFlameflo Le 30 juillet 2016 à 20:29

Petit up ! 😀
TheFlameflo

TheFlameflo Le 31 juillet 2016 à 20:29

Up !
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte