Могут ли пространства имен PHP содержать переменные?

Могут ли пространства имен PHP содержать переменные? Если да, то как это можно осуществить?

Нет. Вы можете установить переменную после объявления пространства имен, но переменные всегда будут существовать в глобальной области. Они никогда не привязаны к пространствам имен. Вы можете сделать вывод, что из-за отсутствия каких-либо описаний разрешения имен в

  • Часто задаваемые вопросы: что вам нужно знать о пространствах имен (PHP 5> = 5.3.0)

Также не было бы разрешенного синтаксиса для нахождения переменных в пространстве имен.

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

Попробуй это

 <?php namespace App\login; $p = 'login'; $test2 = '\App\\'.$p.'\\MyClass'; $test = new $test2; 

Нет, они не могут, как сказал марио.

Для инкапсуляции переменных используются классы . Следует, безусловно, избегать загрязнения глобального пространства переменных.

  • пример

    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 ); 
  • Пример использования пространств имен

    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 ); 

Это можно сделать – вроде.

Это, вероятно, очень плохо и никогда не должно быть сделано, но это возможно, используя переменные переменные и магическую константу для пространства имен. Итак, строковая переменная для обозначения переменной, которую мы хотим использовать, например:

 <?php namespace your\namespace; $varname = __NAMESPACE__.'\your_variablename'; //__NAMESPACE__ is a magic constant $namespaced_variable = $$varname; //Note the double dollar, a variable variable ?> 

Я прошу не согласиться с этим руководством, МЫ МОЖЕМ .

http://php.net/manual/en/language.namespaces.dynamic.php

 <?php namespace namespacename; class classname { function __construct() { echo __METHOD__,"\n"; } } function funcname() { echo __FUNCTION__,"\n"; } const constname = "namespaced"; /* note that if using double quotes, "\\namespacename\\classname" must be used */ $a = '\namespacename\classname'; $obj = new $a; // prints namespacename\classname::__construct $a = 'namespacename\classname'; $obj = new $a; // also prints namespacename\classname::__construct $b = 'namespacename\funcname'; $b(); // prints namespacename\funcname $b = '\namespacename\funcname'; $b(); // also prints namespacename\funcname echo constant('\namespacename\constname'), "\n"; // prints namespaced echo constant('namespacename\constname'), "\n"; // also prints namespaced