问题描述
于是我发现了这个问题:
// name1.PHP
namespace Examples\Names;
class Name {
public function __toString() {
return "Laurel";
}
public static function get() {
return "Eminent";
}
}
// name2.PHP
namespace Examples;
include "name1.PHP";
class Name {
public function __toString() {
return "James";
}
public static function get() {
return "Cook";
}
}
echo new Name() . " | " . Names\Name::get();
我想了解为什么这个 echo echo new Name() . " | " . Names\Name::get();
take 显示 James | Eminent
。
我想我是从第二个第二部分 Names\Name::get()
中得到的,它从 Examples\Names\Name Eminent
中获取,因为它有那个 get,但是第一部分呢?为什么默认需要 James
?
此外,当我尝试将 switch 从 Names\Name::get()
移除到 Names\Name()
只是为了查看它是否显示来自第二类的 __toString - Cook
它不起作用并且我收到此错误 { {1}}
你能帮我解决这个问题吗?我真的很想明白。谢谢!
解决方法
第一部分怎么样
...它使用 Examples
命名空间中的类,因为它与 echo
语句位于同一命名空间中。并且它响应 James
因为 __toString
- 当您尝试将对象放入字符串时,它作为 PHP 在幕后调用的默认函数。
从 Names\Name::get() 切换到 Names\Name()
...我认为,如果你想实例化这个类,它应该是 new Names\Name()
。