namespace-php如何通过命名空间使用其他文件中的变量

问题描述

php如何通过命名空间使用其他文件中的变量

比如有个 a.php 这样定义
<?php
namespace np1; $foo = 'foo'; const foofoo = 'foofoo';
另外有个 b.php 这样定义
<?php
namespace np2; $bar = 'bar'; const barbar = 'barbar';
在c.php定义
<?php
require "a.php" ; require "b.php";
$baz = np1$foo; $qux = np2$bar;
echo "$baz and $qux !"

三个文件在同一目录中,已经被正确require了,运行会出错!
而c.php 中输出a.php 和b.php 中的常量,比如c.php如下:
<?php
$baz = np1foofoo; $qux = np2arbar;
echo "$baz and $qux !"

则能正确输出。
所以问题来了,怎样才能在c.php通过命名空间标识使用a.php 和 b.php中的变量$foo和$bar .
好吧,是我问题没有提清楚。试了下,直接 echo "$foo"; 是可以输出的!但是既然
$foo是命名空间np1中定义的变量,为什么在c.php中使用时不能加上命名空间的名字呢,比如这样 echo np1$foo;

但是相反,如果a.php 中定义了一个类和一个常量,比如a.php 这样定义:

<?php
?    ?namespace np1;
?    ??$foo = 'foo';  //变量
?    ?const foofoo = 'foofoo'; //常量

class C1{  //类
public function __construct($name, $time)
{
    echo "It's echoing from class C1.<br/> your name: $name, and your login     ?    ?    ?          time: $time <br/>";

}
?
?public function saysth(){
?    ?echo "echoing from function saysth of np1C1 <br/>";
?}

}

在c.php文件中可以通过命名空间np1使用文件a.php中的常量 foofoo和类C1但是无法通过命名空间使用变量$foo .
比如c.php 这样

<?php
require "a.php" ;
require "b.php";
$baz = new np1C1("leon",time());
$qux = np1foofoo;

$baz.saysth();
echo "$qux
";

上述c.php能够正常使用np1中的类C1和常量foofoo, 但是为什么不能通过np1$foo 使用np1中的变量$foo 呢,搞不懂!不信大家可以试试.

设想一下如果b.php文件和a.php文件中同有名为$foo的变量 ,这样在c.php 直接使用$foo而不加命名空间限定,程序怎么判断这个变量是哪个文件定义的呢(我试了一下谁require在后输出谁的变量)?

解决方案

使用命名空间、头文件和实现文件

解决方案二:

你可以用框架,,在基类里面去定义,就可以了

时间: 2024-12-23 22:36:24

namespace-php如何通过命名空间使用其他文件中的变量的相关文章

it c++-我想实现在头文件中该变量怎么办

问题描述 我想实现在头文件中该变量怎么办 头文件中一个函数的变量想通过外界输入获取 该怎么办? 解决方案 图太小,看不见. int main(int argc, char ** args) //这里args就是外部参数,你可以读取它,给程序赋值.

java调用codesoft,如何给lab文件中的变量赋值?那个invoke怎么写啊?

问题描述 *.lab文件是codesoft软件做成的模版文件. 解决方案 解决方案二:没用过这东西,估计用的人也比较少帮顶解决方案三:好像有一个接口可以调用的具体是什么忘记了你可以在网上找一找解决方案四:用Automation的Invoke方法可以调用Lppx2.Application中的函数的,但我找到的例子都是只带一个参数的函数,没有带2个参数函数的例子,刚才看了一下C#的代码,和VB6的差不多,但java的,哎......解决方案五:不会,帮顶!解决方案六:该回复于2010-01-19 1

请问各位前辈高人,java调用codesoft,如何给lab文件中的变量赋值?那个invoke怎么写啊?

问题描述 *.lab文件是codesoft软件做成的模版文件.(分数比较少,请多多包涵!) 解决方案 解决方案二:没做过,帮顶解决方案三:希望这篇文章对楼主你有帮助:解决方案四:谢谢!!只是我不知道DynamicMapModel这个类是怎么写的,要是知道了,我的问题就解决了...解决方案五:没做过

头文件不宜定义变量的原因全面解析_C 语言

test-1.0使用#ifndef只是防止了头文件被重复包含(其实本例中只有一个头件,不会存在重复包含的问题),但是无法防止变量被重复定义. 复制代码 代码如下: # vi test.c-------------------------------#include <stdio.h>#include "test.h" extern i;extern void test1();extern void test2(); int main(){   test1();   prin

c++-命名空间中定义的类是否需要在同一文件中给出实现方法?

问题描述 命名空间中定义的类是否需要在同一文件中给出实现方法? 如题,比如在test.h文件中有如下namespace namespace ns { ...; class student *ptr; ...} class student 的实现方法是否要在test.h文件中给出?为什么? 解决方案 命名空间只是为了区分重命名等,你的实现等可以在其他cpp中. 解决方案二: 不需要,命名空间是为了防止变量重名.

C++可以在多个头文件中重复定义同一名称的命名空间吗?

问题描述 C++可以在多个头文件中重复定义同一名称的命名空间吗? test_a.h中有定义: namespace ns { class a {...}; } test_b.h中有定义: namespace ns { class b {...}; } test_c.h中有定义: namespace ns { class c {...}; } 然后,在test_c.cpp中有如下代码片段: #include "test_a.h" #include "test_b.h"

类的声明和实现在不同文件中,出现: is not a class or namespace name

问题描述 类的声明和实现在不同文件中,出现: is not a class or namespace name 将三个类的声明和实现保存在不同的头文件和源程序文件中,执行出现一大堆基类,派生类 : is not a class or namespace name,基类,派生类成员也是undeclared identifier,这是怎么回事,求解~~基类pubication头文件基类源程序book派生类头文件book派生类源程序tape类派生类头文件tape类派生类源程序main函数 解决方案 i

编译错误-string在头文件中编译时提示缺少“;”,求解

问题描述 string在头文件中编译时提示缺少":",求解 碰到一个神奇的问题: //在head.h头文件中写如下代码: class A { public: string name; A (string); }; 结果编译的时候出现name前缺少":",如果我真的在name前加上一个":",编译的时候这个问题就没了,你说神奇不?有人知道怎么解决吗? 如果把class A和源文件写在一起就没问了,搞的我莫名其妙. 解决方案 C++为了安全,提供命名

vs2008中怎样将一个类分写在多个 .cs 文件中?

问题描述 最近在用vs2008,如果一个类太长,想把它分开写在多个文件中,比如,有一个函数很长,想单独放在一个文件中,所有的属性也想单独放在一个文件中,怎样操作呢? 解决方案 解决方案二:partialclassXXX解决方案三:添加一个windows窗体,form1.cs和form1.designer.cs就是很好的例子,照着做就行解决方案四:添加多个类就可以了把类定义为public的,把类和属性也定义为public的如果是全局的变量用static定义,///<summary>///第一个属