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";
echo "$foo <br/>";

echo "$bar <br/>";

三个文件在同一目录中,已经被正确require了,但是执行c.php没有输出,如果在c.php使用如下语句:
$baz = np1\$foo; $qux = np2\$bar;
echo "$baz and $qux !"
则会出错!
而输出常量:
$baz = np1\foofoo; $qux = np2\barbar;
echo "$baz and $qux !"
则能正确输出。
所以问题来了,怎样才能在c.php使用a.php 和 b.php中的变量$foo和$bar
试了下,直接 echo "$foo"; 是可以输出的!但是既然
$foo是命名空间np1中定义的变量,为什么在c.php中使用时不能加上命名空间的名字呢,比如这样 echo np1\$foo;
但是相反,如果a.php 中定义了一个类和一个常量则必须加加个命名空间才能在c.php中使用.
假如a.php中有个class C1{
}

则c.php要使用的话则必须这样 new np1\C1(); 否则出错或没有效果!

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

第1个回答  2015-12-11
<?php require_once('condb.php'); ?>
包含的语法应该是这样的吧,另外输出变量是不要引号的;echo $baz ;这样就可以了
第2个回答  2015-12-11
经过测试变量是全局的....
我这边测试可以 ..直接使用变量...
a.php
<?php
namespace n1;
$foo=1;

?>

b.php
<?php
namespace n2;
$foo=2;

?>
c.php
<?php
require "a.php";
require "b.php";
echo $foo;
?>追问

问题没有描述清楚,后面补充了,如何使用命名空间限定

本回答被网友采纳
相似回答