__toString 在此示例中如何工作?

How __toString works in this example?

所以我发现了这个问题:

// 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 new Name() . " | " . Names\Name::get();会显示James | Eminent。 我想我从 Examples\Names\Name Eminent 中得到了关于第二部分 Names\Name::get() 的信息,因为它已经得到了,但是第一部分呢?为什么默认需要 James

此外,当我尝试移除从 Names\Name::get()Names\Name() 的开关时,只是为了查看它是否从第二个 class - Cook 显示 __toString不起作用,我收到此错误 Fatal error: Uncaught Error: Call to undefined function Examples\Names\Name() in C

你能帮我吗?我真的很想明白。谢谢!

what about first part

...它使用 Examples 命名空间中的 class,因为它与 echo 语句位于同一命名空间中。它回显 James,因为 __toString - 当您尝试将对象放入字符串时,它作为 PHP 在幕后调用的默认函数。

switch from Names\Name::get() to Names\Name()

...它需要是 new Names\Name() 我想,如果你想实例化 class.