为什么php' t的类加载不像java ' import&;那么简单?


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

在项目中使用类特性的PHP开发人员在使用它们之前必须做大量的工作来加载特定的类。PHP __autoload()(将在将来弃用),spl_autoload_register(), psr-0 &Psr-4标准来自动加载它们。

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

In psr-0 &Psr-4我们配置编写器。通过设置自动加载的psr-0或psr-4或classmap路径到供应商文件夹。执行dump-autload,在php文件中包含生成的autolload .php和psr-4约定的"使用"命名空间"据说使我们的工作更容易(这不是)。

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

我的问题是,为什么php加载类不像java包那么简单&进口吗?

我知道如果不是几乎不可能的话,可能会有一些实现上的困难。

如果不是10万行,那么几千行新的c代码绝对不会减慢php解释器的速度,以帮助查找import关键字中提到的类名,并像java一样从包中加载该类,而不是这些繁琐的约定(spl_autoload_register(),psr-0,psr-4),它们被认为会使加载类更容易。

我在我的大多数项目中使用java。所以,我是php的新手,这类问题可能很常见,可能看起来很新手。非常感谢回复。谢谢。

是的。

psr(目前)只是框架实现的建议。也就是说,除非您正在编写一个框架或包,否则它不是真正针对您的。碰巧许多php开发人员都喜欢遵循这些标准(特别是PSRs 1、2和12)。

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

然而,include_once仍然是一个有效的方法来加载一个类,如果你问我可以经常是最好的方法,而且(不是一个Java开发人员)我认为就像在Java中一样简单。