PHP名称空间是否可以包含variables?

PHP名称空间是否可以包含variables? 如果是这样,那怎么能做到呢?

不可以。您可以在声明一个名称空间后设置一个variables,但variables将始终存在于全局范围中。 它们永远不会被绑定到命名空间。 你可以从中没有任何名称parsing描述推断出来

  • FAQ:你需要知道的关于命名空间的东西 (PHP 5> = 5.3.0)

也没有允许的语法来定位名称空间中的variables。

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; 

不,他们不能像马里奥所说的那样。

封装variables使用 。 一定要避免污染全局variables空间。

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

它可以做 – 有点。

这可能是非常糟糕的,不应该这样做,但是可以通过使用variablesvariables和命名空间的魔术常量 。 所以一个stringvariables来命名我们想要使用的variables,如下所示:

 <?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