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