2011-05-08 4 views
0

avec le code de suivi:PHP POO - objet incorrect est retourné

<?php 
class Loader { 
    private static $instances; 

    function __construct($class = null) { 
     return self::instance($class); 
    } 

    public static function instance($class) { 
     if(!isset(self::$instances[$class])) { 
      self::$instances[$class] = new $class(); 
     } 

     return self::$instances[$class]; 
    } 
} 

class Core { 
} 

$core = new Loader('Core'); 
print_r($core); 

?> 

mon print_r() retourne l'objet Loader place l'objet de base, qui est instancié après Loader est construit.

Merci pour votre aide!

Répondre

8

Hm?

Si vous

$core = new Loader('Core'); 

Alors $ noyau va être une instance de Loader ... PS: les constructeurs ne renvoient pas une valeur.

Vous n'avez pas besoin d'instancier le chargeur du tout.

Pour ce faire:

<?php 
class Loader { 
    private static $instances; 

    public static function instance($class) { 
     if(!isset(self::$instances[$class])) { 
      self::$instances[$class] = new $class(); 
     } 

     return self::$instances[$class]; 
    } 
} 

class Core { 
} 

$core = Loader::instance('Core'); 
print_r($core); 

Ou vous pouvez faire beaucoup plus simple:

<?php 
function Load($class) 
{ 
    static $instances; 
    if(!isset($instances[$class])) 
     $instances[$class] = new $class(); 
    return $instances[$class]; 
} 

class Core { 
} 

$core = Load('Core'); 
print_r($core); 
+0

Il y a une erreur dans l'exemple de fonction: vous l'appelez 'Loader', mais appelez plus tard comme' charge '. – Maerlyn

+0

erreur corrigée;) – peufeu

+0

Merci, je pensais que je ne pouvais pas définir des variables statiques dans les fonctions. –