Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 名称空间强制我的类被取消查找_Php_Namespaces - Fatal编程技术网

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();