为什么php的class加载没有java"import"简单?

Why isn't php's class loading is not as simpler as java "import"?

PHP 在他们的项目中使用 class 功能的开发人员在使用它们之前必须做很多马戏来加载特定的 class。 php __autoload()(将来会被弃用),spl_autoload_register(),psr-0 和 psr-4 标准来自动加载它们。

__autoload() 或 spl_autoload_register() 函数(其中包含所有 classes 的路径)在 start.php 中定义的示例必须首先包含在索引或任何 php 页面中,然后使用加载的 class 对象进行工作。

在 psr-0 和 psr-4 中,我们通过设置自动加载的 psr-0 或 psr-4 或 classmap 供应商文件夹的路径来配置 composer.json。进行转储自动加载,将生成的单个 autoload.php 包含在您的 php 文件中,并且 "use" "namespace" 的 psr-4 约定据说可以让我们的生活更轻松(但事实并非如此) .

在java中,在包下定义classes然后简单地导入所需的class并使用它。

我的问题是,为什么 php 加载 classes 不像 java 包和导入那么简单?

我知道即使不是几乎不可能,也可能存在一些实施困难。

几千个新的 C 代码行,如果不是十万,绝对不会减慢 php 解释器来帮助查找 import 关键字中提到的 class 名称并从中加载 class类似于 java 的包,而不是这些繁琐的约定(spl_autoload_register()、psr-0、psr-4),这些约定使加载 classes 更容易。

我在我的大部分项目中都使用了 java。所以,我是 php 的新手,这种问题可能看起来很菜鸟。非常感谢您的答复。谢谢

嗯,是的。

PSR(目前)只是框架实施的建议。也就是说,除非您正在编写一个框架或包,否则它并不是真正针对您的。碰巧的是,许多 php 开发人员无论如何都喜欢遵循标准(尤其是 PSR 1、2 和 12)。

碰巧,PSR-4 示例都使用 spl_autoload_register(),这是包含包和 classes 的更方便的方式,而不需要 include_once。 PSR-4 只是一个独立于 php 语言的机构的推荐,并且相对较新,这就是为什么你可以以任何你想要的方式实现 spl_autoload_register()

但是,include_once 仍然是加载 class 的有效方法,而且如果你问我通常是最好的方法,并且(不是 Java 开发人员)我假设它和 Java.

中的等价物一样简单