2011-03-13 63 views

回答

32

不可以。您可以在声明命名空间后设置变量,但变量将始终存在于全局范围内。它们永远不会被绑定到命名空间。您可以在

,也将不允许有语法来定位命名空间中的变量推断,从没有任何名称解析描述。

print \namespace\$var;  // syntax error 

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

试试这个

<?php 
namespace App\login; 

$p = 'login'; 
$test2 = '\App\\'.$p.'\\MyClass'; 

$test = new $test2; 
+4

命名空间必须是文件的第一行。不是吗? – diEcho 2015-01-22 05:42:44

+0

这肯定是有效的,我使用它是这样的:$ class ='\\'。$ vendor。'\\'。$ application。'\\路由器';返回新的$ class(); – joronimo 2016-02-06 02:22:46

+0

在这里使用单个或双个'\'的规则是什么? – 2017-09-20 05:26:12

10

没有他们不能像马里奥说。

封装变量使用。应该避免污染全局变量空间。

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

这是可以做到 - 那种。

这可能是极坏的,绝不应该做的,但也可以通过使用variable variablesmagic constant的命名空间。 所以一个字符串变量来命名我们想用,像这样的变量:

<?php 
namespace your\namespace; 

$varname = __NAMESPACE__.'\your_variablename'; //__NAMESPACE__ is a magic constant 
$namespaced_variable = $$varname; //Note the double dollar, a variable variable 
?> 
+3

问题是'PHP名称空间是否包含变量?'不是'PHP变量是否可以包含名称空间?' – 2016-04-19 11:40:00

0

我恳求根据本手册不同意,我们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 
+4

常量名不是那里的变量,它是一个常量 – m1k3lm 2016-09-16 14:51:24

相关问题