PHP名称空间可以包含变量吗?
不可以。您可以在声明命名空间后设置变量,但变量将始终存在于全局范围内。它们永远不会被绑定到命名空间。您可以在
- FAQ: things you need to know about namespaces(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);
这是可以做到 - 那种。
这可能是极坏的,绝不应该做的,但也可以通过使用variable variables和magic constant的命名空间。 所以一个字符串变量来命名我们想用,像这样的变量:
<?php
namespace your\namespace;
$varname = __NAMESPACE__.'\your_variablename'; //__NAMESPACE__ is a magic constant
$namespaced_variable = $$varname; //Note the double dollar, a variable variable
?>
问题是'PHP名称空间是否包含变量?'不是'PHP变量是否可以包含名称空间?' – 2016-04-19 11:40:00
我恳求根据本手册不同意,我们CAN。
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
常量名不是那里的变量,它是一个常量 – m1k3lm 2016-09-16 14:51:24
您是否尝试过?如果你尝试过,结果如何? – Charles 2011-03-13 04:07:05