PHP名称空间可以包含变量吗?

PHP名称空间可以包含变量吗? 如果是这样,如何才能做到这一点?

6个解决方案

40 votes

不可以。您可以在声明名称空间后设置变量,但是变量将始终存在于全局范围内。 它们永远不会绑定到名称空间。 您可以从中没有任何名称解析描述来推断出这一点

常见问题解答:关于命名空间,您需要了解的事情(PHP 5> = 5.3.0)

也将不允许使用语法在命名空间中定位变量。

print \namespace\$var; // syntax error

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

mario answered 2020-01-06T10:59:35Z

19 votes

尝试这个

namespace App\login;

$p = 'login';

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

$test = new $test2;

Maxim answered 2020-01-06T10:59:54Z

11 votes

正如马里奥所说,他们不能。

要封装变量,请使用类。 绝对应该避免污染全局变量空间。

include_once 'class_dbworker.php';

use staticdata as data;

print_r( \data\DbWorkerData::$hugerelationsmap );

include_once 'class_dbworker.php';

use staticdata as data;

print_r( \data\DbWorkerData::$hugerelationsmap );

include_once 'class_dbworker.php';

use staticdata as data;

print_r( \data\DbWorkerData::$hugerelationsmap );

include_once 'class_dbworker.php';

use staticdata as data;

print_r( \data\DbWorkerData::$hugerelationsmap );

使用名称空间的示例

include_once 'class_dbworker.php';

use staticdata as data;

print_r( \data\DbWorkerData::$hugerelationsmap );

include_once 'class_dbworker.php';

use staticdata as data;

print_r( \data\DbWorkerData::$hugerelationsmap );

include_once 'class_dbworker.php';

use staticdata as data;

print_r( \data\DbWorkerData::$hugerelationsmap );

include_once 'class_dbworker.php';

use staticdata as data;

print_r( \data\DbWorkerData::$hugerelationsmap );

Lorenz Lo Sauer answered 2020-01-06T11:06:38Z

0 votes

没有可能,请问为什么,$ MYVARNAME仍在全球范围内

namespace.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

${MYNAME\MYVAR}=date('Y');

echo $MYVARNAME; // PRINT YEAR

$MYVARNAME = 'X';

echo $MYVARNAME; // PRINT X

echo ${MYNAME\MYVAR}; // PRINT X

include('file2.php');

?>

** file2.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' */

?>

citygeist answered 2020-01-06T11:07:11Z

-1 votes

可以做到的。

这可能非常糟糕,绝不应该这样做,但是可以通过使用变量变量和命名空间的魔术常数来实现。因此,使用一个字符串变量来命名我们要使用的变量,如下所示:

namespace your\namespace;

$varname = __NAMESPACE__.'\your_variablename'; //__NAMESPACE__ is a magic constant

$namespaced_variable = $$varname; //Note the double dollar, a variable variable

?>

JohnF answered 2020-01-06T11:07:36Z

-1 votes

基于本手册《我们可以》,我不同意。

[http://php.net/manual/en/language.namespaces.dynamic.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

Louie Miranda answered 2020-01-06T11:08:00Z

空间变量php,PHP名称空间可以包含变量吗?相关推荐

  1. python名称空间_python基础:名称空间与作用域

    Python的变量定义后都有自己的作用域,每个作用域内都有名字空间.名称空间就是变量名称与对象的关联关系.Python中使用变量名引用对象,需要使用该变量时,就在命名空间中进行搜索,获取对应的对象.从 ...

  2. python 类的执行中保部存值_python函数名称空间与作用域、闭包

    一.命名空间概念 1.命名空间(name space) 名称空间是存放名字的地方. 若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方. 2.名称空间加载顺序 python te ...

  3. 函数对象,名称空间与作用域,闭包,装饰器

    函数是第一类对象即可以被当做数据取使用 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 1.可以被引用 先看变量可以怎么玩 age=18 x=age 把 ...

  4. static在内存层面的作用_「C++ Primer plus 心得」9.内存模型和名称空间

    本章内容包括: 单独编译 存储持续性.作用域和链接性 定位new运算符 名称空间 C++ 为在内存中存储数据方面提供了多种选择.可以厅数据保留在内存中的时间长度(存储持续性)以及程序的哪一部分可以访问 ...

  5. python之函数名称空间,作用域,嵌套函数

    目录 嵌套函数 定义 名称空间的三大类(只存变量名) 名称空间加载顺序 变量名的查找顺序为 作用域 嵌套函数 定义 函数内部定义的函数,无法在函数外部使用内部定义的函数. def f1():def f ...

  6. python类的构造方法名称_搞懂Python的类和对象名称空间

    代码块的分类 python中分几种代码块类型,它们都有自己的作用域,或者说名称空间:文件或模块整体是一个代码块,名称空间为全局范围 函数代码块,名称空间为函数自身范围,是本地作用域,在全局范围的内层函 ...

  7. python函数作用域与闭包_python函数名称空间与作用域、闭包

    一.命名空间概念 1.命名空间(name space) 名称空间是存放名字的地方. 若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方. 2.名称空间加载顺序 python te ...

  8. 函数的嵌套,名称空间和作用域

    假如有一个函数,实现返回两个数中的较大值: def my_max(x,y):m = x if x>y else yreturn mbigger = my_max(10,20)print(bigg ...

  9. 如何在JavaScript中声明名称空间?

    如何在JavaScript中创建名称空间,以使我的对象和函数不会被其他同名对象和函数覆盖? 我使用了以下内容: if (Foo == null || typeof(Foo) != "obje ...

  10. Python基础知识——函数的基本使用、函数的参数、名称空间与作用域、函数对象与闭包、 装饰器、迭代器、生成器与yield、函数递归、面向过程与函数式(map、reduce、filter)

    文章目录 1 函数的基本使用 一 引入 二 定义函数 三 调用函数与函数返回值 2 函数的参数 一 形参与实参介绍 二 形参与实参的具体使用 2.1 位置参数 2.2 关键字参数 2.3 默认参数 2 ...

最新文章

  1. 普渡大学李攀:好的图表示到底是什么?
  2. 每天一道LeetCode-----将数组/链表后k个元素移动到前面
  3. Pytorch 自定义激活函数前向与反向传播 ReLu系列 含优点与缺点
  4. 收集的安装VS2005 sp1的注意事项
  5. C++中string.find()的误用
  6. 2篇word文档比较重复率_本科论文写作重复率高的原因,毕业论文降重技巧总结!...
  7. 软件测试工程师-缺陷报告
  8. mybatis的源码学习
  9. thinkphp5之配置tp5重写伪静态
  10. Visio搜索形状显示无匹配项的解决方法
  11. 路由器OpenWRT、LEDE、潘多拉、华硕、梅林、老毛子系统区别和特点
  12. Ubuntu系统下搭建C/C++ gcc开发环境
  13. uClinux 启动过程详细分析(一)
  14. P3537 [POI2012]SZA-Cloakroom
  15. [Go]select监听channel
  16. 多双系统下蓝牙键盘鼠标的共享配对问题解决办法:win + debian + arch~IRK、LTK、ERand、EDIV、CSRK
  17. 那些与三维激光扫描有关的建模
  18. kill和killall的区别
  19. 2022年第一个技能:视频剪辑学习笔记
  20. 嵌入式学习DAY10 --- 封装子函数,GDB调试,gcc编译流程

热门文章

  1. 工业大数据技术简介--来源、特点、关键问题以及案例
  2. ACM ICMR 2021雷达目标检测挑战赛(ROD2021)
  3. Mysql添加远程访问权限
  4. 【OpenCV学习笔记】【函数学习】四(origin+imageData+cvcopy()函数+CvMemStorage 类型+CvPoint类型)
  5. ENVI入门系列教程---一、数据预处理---5. 图像自动配准
  6. 《深度学习Python实践》第14章——自动流程
  7. 赫尔默特方差分量估计Python
  8. day7--pandas
  9. 【ArcGIS|空间分析|网络分析】9 使用位置分配选择最佳商店位置
  10. 教务管理系统C++全部代码