2011-03-13 65 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

相關問題