Php 名称空间强制我的类被取消查找
Php 名称空间强制我的类被取消查找,php,namespaces,Php,Namespaces,$foo=newfoo() 如果我删除了名称空间,类就可以正常工作,如果名称空间在那里,我会得到class foo unfounderror。这是什么原因 如果类是命名空间的,那么在实例化时需要引用该命名空间(假设在实例化时处于全局命名空间中) 这就是重点。您可以在不同的命名空间中拥有多个foo类 $foo = new foo\foo(); 然后 namespace foo; class foo {} 现在 namespace bar; class foo {} 了解名称空间的工作原理:这
$foo=newfoo()代码>
如果我删除了名称空间,类就可以正常工作,如果名称空间在那里,我会得到class foo unfound
error。这是什么原因 如果类是命名空间的,那么在实例化时需要引用该命名空间(假设在实例化时处于全局命名空间中)
这就是重点。您可以在不同的命名空间中拥有多个foo
类
$foo = new foo\foo();
然后
namespace foo;
class foo {}
现在
namespace bar;
class foo {}
了解名称空间的工作原理:这就是名称空间的意义所在!为什么在实例化对象时必须使用新的斜杠?难道不能只使用new foo()
?@ANW名称空间的全部目的是分离类,这样就不会产生命名冲突(以及其他问题)。请参阅我的最新答案。名称空间允许您拥有多个foo
类,这意味着您必须引用名称空间,否则PHP不知道使用哪个名称空间。现在的问题是,当我使用您的方法时,在我的类中找不到PHP本机的其他类。例如,我有了新的ArrayIterator()
,现在我得到了类似“致命错误:类”foo\ArrayIterator not found“如何解决这个问题一旦开始使用名称空间,您需要在整个代码中注意它们。在foo\foo
类中,您就在该名称空间中。如果您现在尝试访问ArrayIterator
,它将假定foo\ArrayIterator
,因为您所在的名称空间就是这个名称空间。要访问非名称空间(实际上是全局名称空间)类,请执行\ArrayIterator
。我就是这么做的。但是我得到了这个错误调用未定义的函数ArrayIterator
namespace bar;
class foo {}
$foo1 = new foo\foo();
$foo2 = new bar\foo();