74 votes

Les espaces de noms PHP peuvent-ils contenir des variables?

Les espaces de noms PHP peuvent-ils contenir des variables? Si oui, comment cela peut-il être accompli?

59voto

mario Points 76989

Non. Vous pouvez définir une variable après avoir déclaré un espace de noms, mais les variables existeront toujours dans la portée globale. Ils ne sont jamais liés aux espaces de noms. Vous pouvez déduire cela de l'absence de toute description de résolution de nom dans

Il n'y aurait pas non plus de syntaxe autorisée pour localiser les variables dans un espace de noms.

 print \namespace\$var;      // syntax error

print "${namespace\\var}";  // "unexpected T_NS_SEPARATOR"
 

27voto

Maxim Points 71

Essaye ça

 $p = 'login';
namespace App\login; 
$test2 = '\App\\'.$p.'\\MyClass';

$test = new $test2;
 

18voto

Lo Sauer Points 5469

Non ils ne peuvent pas, en tant que mario a dit.

Pour encapsuler les variables d'utiliser les Classes. Pollution de la variable globale de l'espace devrait certainement être évitée.

  • Exemple

    class_dbworker.php:

    class DbWorker
    {
        //properties and method logic
    }
    
    class DbWorkerData
    {
        public static $hugerelationsmap = array(....);
        public static ....
    }
    

    mainapp.php:

    include_once 'class_dbworker.php';
    print_r( DbWorkerData::$hugerelationsmap );
    
  • Exemple d'utilisation des espaces de noms

    class_dbworker.php:

    namespace staticdata;
    class DbWorker
    {
        //properties and method logic
    }
    
    class DbWorkerData
    {
        public static $hugerelationsmap = array(....);
        public static ....
    }
    

    mainapp.php:

    include_once 'class_dbworker.php';
    
    use staticdata as data;
    
    print_r( \data\DbWorkerData::$hugerelationsmap );
    

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X