调试相关:为什么这段PHP代码不能以期望的行为工作?

调试相关:为什么这段PHP代码不能以期望的行为工作?,php,Php,我试图从示例中了解php名称空间中别名/导入的用法。 我稍微修改了示例,以在单个代码文件中探索php名称空间别名/导入的所有功能。 我还在同一个文件中添加了多个名称空间以观察所有特性。 以下是php源代码: <?php namespace foo{ echo "1-Inside namespace foo \n"; use My\Full\Classname as Another; use ArrayObject; // importing a global class echo "2-A

我试图从示例中了解php名称空间中别名/导入的用法。 我稍微修改了示例,以在单个代码文件中探索php名称空间别名/导入的所有功能。 我还在同一个文件中添加了多个名称空间以观察所有特性。 以下是php源代码:

<?php
namespace foo{
echo "1-Inside namespace foo \n";
use My\Full\Classname as Another;
use ArrayObject; // importing a global class
echo "2-After using  ArrayObject line: ".__LINE__."\n"; 
    class Another {
  public function cname() {
        echo "line".__LINE__."Method".__METHOD__."\n";       
   }
   static function  method(){echo "line".__LINE__."Method: ".__METHOD__."\n";}
} 
//This line below is Not working.
$obj1 = new namespace\Another; // instantiates object of foo\Another
echo "3-After namespace\Another object line: ".__LINE__."\n";
//This line below is Not working.
echo "4-".$obj1->method()."\n";
//This line below is Not working.
$obj2 = new Another; // instantiates object of class My\Full\Classname
echo "5-After Another object line: ".__LINE__."\n";
//This line below is Not working.
echo "6-".$obj2->method()."\n";
echo "7-After Another object line: ".__LINE__."\n";
//This line below is Not working.
$a = new ArrayObject(array(1)); // instantiates object of ArrayObject
echo "8-After ArrayObject line: ".__LINE__."\n";
}

namespace My\Full{

class Classname{
    public function cname() {
        echo "line".__LINE__."Method".__METHOD__."\n";       
   }
   static function  method(){echo "line".__LINE__."Method: ".__METHOD__."\n";} } }    
?>
但我得到的不是期望的输出,而是以下给出的几个错误输出:

1-Inside namespace foo 
2-After using ArrayObject line: x
3-After namespace\Another object line: x
4-line: x Method: foo\Another:method()
5-After Another object line: x
6-line: x Method: My\Full\Classname:method()
7-After Another object line: x
8-After ArrayObject line: x
PHP Fatal error:  Cannot declare class foo\Another because the name is already in use in /home/himadree/ php workspace/ZCE/TOPIC1:BASICS/Namespaces/Using-namespaces-Aliasing-Importing.php on line 8
因此,看起来可能存在与另一个类名相同的命名冲突 此外,我注意到类“otheran”有两个版本:foo\otheran&My\Full\Classname作为另一个。在一些有用的注释之后,我在名称空间foo中添加了额外的类“otheran”。但它仍然不起作用。这是唯一的错误吗!我不知道。 因此,为了获得所需的行为/输出,需要对代码进行哪些更改?我使用了eclipse php pdt工具,php版本5.5。
因为这是调试问题,所以如果需要更多具体信息,请告诉我。谢谢。具体问题是没有定义类foo/另一个。您在命名空间foo中缺少以下内容:

如果没有它或类似的东西,foo\other就不存在,并且尝试实例化它(正如您所做的那样)将导致致命错误(正如它所做的那样)

此外,我注意到类“otheran”有两个版本:foo\otheran&My\Full\Classname作为另一个


这就是这段代码试图演示的要点。仅另一个将是不明确的,因为它可以将别名称为另一个或foo\other。因此,为什么使用namespace\other显式引用foo\other。与新的“另一个”不同,新的“另一个”将别名称为“另一个”。

谢谢您的宝贵意见。但是,我重新编辑了代码,但仍然出现错误。我认为可能与另一个类名存在任何相同的命名冲突。如何解决保持相同名称不变的问题。尽管我不确定这是否是唯一的错误!PHP的实现似乎存在冲突。有些版本要求您在自己的名称空间foo{}块中声明该类,其他版本则要求在使用之前声明该类,而其他版本似乎根本不支持该类。如果您根据需要从文件中自动加载该类,它可能会工作得更好。
class Another {}