gpt4 book ai didi

php - 是否可以在 spl_autoload_registry 中扩展具有相同类但路径不同的命名空间类

转载 作者:行者123 更新时间:2023-12-04 16:52:14 25 4
gpt4 key购买 nike

我有两个命名空间类加载了具有相同命名空间和类的 Composer 。 (PSR4)

//directory1/Foo/Bar.php
namespace Foo;

class Bar{
....
}

我有一个具有相同命名空间的第二个目录用于覆盖。
//directory2/Foo/Bar.php
namespace Foo;

class Bar{
....
}

现在,如果我将目录 1 和目录 2 都注册为自动加载程序,目录 2 将优先于目录 1。
使用这种方法,我可以通过备用目录完全覆​​盖类。

当调用 new Foo\Bar;

我会得到一个 directory2/Foo/Bar.php 的实例

如果文件没有在第二个目录中退出,我将得到一个实例:

我会得到一个 directory1/Foo/Bar.php 的实例

这很好,但我有一个问题。

尽管我可以完全覆盖,但似乎不可能扩展以这种方式设置的类。

在 directory2/Foo 中找到的 Bar 是否可以扩展在 directory1/Foo 中找到的 Bar 因为它们共享命名空间和类名?

最佳答案

我强烈反对让自动加载决定加载哪个版本的类的想法。

如果您两次创建同一个类,两个版本之间可能存在差异,任何其他程序员(包括一段时间后的您自己)都会混淆哪个类真正包含您的程序中正在使用的正确代码。

此外,所有进行大量代码索引和解析的 IDE 也会感到困惑,并表示可能会使用两种可能的类。

没有人会因为拥有完全相同的类名但代码不同的两个不同的文件而获得任何好处。

你没有说明你想用这种方法解决哪个问题,但我认为你应该这样做!在解决面向对象的编程问题时,自动加载不应该发挥任何作用。

关于php - 是否可以在 spl_autoload_registry 中扩展具有相同类但路径不同的命名空间类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24919155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com