PHP名称空间可以包含变量吗?如果是这样,怎么能实现呢?
答案 0 :(得分:37)
没有。您可以在声明命名空间后设置变量,但变量将始终存在于全局范围中。它们永远不会绑定到名称空间。您可以从
中没有任何名称解析说明中推断出这一点也没有允许在命名空间中定位变量的语法。
print \namespace\$var; // syntax error
print "${namespace\\var}"; // "unexpected T_NS_SEPARATOR"
答案 1 :(得分:17)
试试这个
<?php
namespace App\login;
$p = 'login';
$test2 = '\App\\'.$p.'\\MyClass';
$test = new $test2;
答案 2 :(得分:11)
不他们不能,正如马里奥所说。
要封装变量,请使用 Classes 。绝对应该避免污染全局变量空间。
实施例
<强> 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 );
答案 3 :(得分:0)
这不可能,您会发现为什么 $ MYVARNAME 仍在全球范围内
namespace.php
<?php
namespace MYNAME;
use MYNAME as M;
const MYVAR = 'MYVARNAME';
${M\MYVAR} = date('Y');
echo $MYVARNAME; // PRINT YEAR
$MYVARNAME = 'X';
echo $MYVARNAME; // PRINT X
echo ${M\MYVAR} ; // PRINT X
include('file.php');
?>
file.php
<?php
${MYNAME\MYVAR}=date('Y');
echo $MYVARNAME; // PRINT YEAR
$MYVARNAME = 'X';
echo $MYVARNAME; // PRINT X
echo ${MYNAME\MYVAR}; // PRINT X
include('file2.php');
?>
** file2.php **
<?php
namespace MYNAME2;
use MYNAME2 as N;
const MYVAR = 'MYVARNAME';
${N\MYVAR} = 'Y';
echo $MYVARNAME; // PRINT Y
echo ${MYNAME\MYVAR}; /* PRINT Fatal error: Uncaught Error:
Undefined constant 'MYNAME2\MYNAME\MYVAR' */
?>
答案 4 :(得分:0)
将完整的classPath存储在Variable中,并在“ new”之后使用。
认识到非常重要,因为反斜杠在字符串中用作转义字符,所以在字符串中使用反斜杠时应始终加倍。
<?php
$a = "namespace\\className"; // 'which will print namespace/className'
$obj = new $a;
?>
答案 5 :(得分:-1)
可以做到 - 有点像。
这可能非常糟糕,永远不应该完成,但可以使用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
?>
答案 6 :(得分:-2)
我不同意本手册,我们。
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