在我的本地开发机器上(php 5.3.14)我可以使用这样的类:
<?php
namespace Shop\Repository;
use Shop\Entity\Day;
use Doctrine\ORM\EntityRepository;
class Product extends EntityRepository
{
// Code
}
该类存储在/my/src/Shop/Repository/Product.php(PSR-0兼容)中。我在/my/src/Shop/Repository/Day.php上有还一个Shop\Repository\Day
。
但是,在我的登台服务器(php 5.3.10)上,我收到以下错误:
PHP致命错误:无法使用Shop \ Entity \ Day作为Day,因为该名称已在第5行的/my/src/Shop/Repository/Product.php中使用
我能理解这条消息,如果我将我的Shop \ Entity \ Day别名导入DayEntity,代码就可以了。但是我无法理解致命错误的原因:为什么这可以在php 5.3.14上工作(或者至少在我的配置中)而不是5.3.10(或者至少在服务器的配置下)?
我想问题是因为在命名空间Shop\Repository
中已经加载了Day
。但这从来没有导致我的设置错误!发生了什么事?
答案 0 :(得分:7)
以下是我抓住这种情况的一些解释:
require_once 'ns_class2.php';
//
namespace ns; // Declaration of the namespace named "ns"
class class2 {} // Declaration of the class "ns/class2"
// In the namespace "ns", "class2" is an alias of "ns\class2"
//
require_once 'ns_ns1_ns2_class2.php';
//
namespace ns\ns1\ns2; // Declaration of the namespace named "ns\ns1\ns2"
class class2 {} // Declaration of the class "ns\ns1\ns2\class2"
// In the namespace "ns\ns1\ns2", "class2" is an alias of "ns\ns1\ns2\class2"
//
require_once 'ns_ns1_ns2_class1.php';
//
namespace ns\ns1\ns2; // Declaration of the namespace named "ns\ns1\ns2"
// In the namespace "ns\ns1\ns2", "class2" is an alias of "ns\ns1\ns2\class2"
use ns\class2; // Creation of the alias "class2" which point to "ns\class2" but class2 is already an alias of ns\ns1\ns2\class2 => ERROR
所以你应该尝试使用get_included_files()来查看你的服务器和工作站有什么不同,因为加载它们的顺序很重要
这些解释与this nice post
评论的dmitry相关联希望这可以提供帮助