【问题标题】:Why isn't php's class loading is not as simpler as java "import"? [closed]为什么php的类加载没有java“import”那么简单? [关闭]
【发布时间】:2016-12-19 20:23:31
【问题描述】:

在他们的项目中使用类特性的 PHP 开发人员在使用它们之前必须做很多事情来加载特定的类。 php __autoload()(将来会弃用)、spl_autoload_register()、psr-0 和 psr-4 标准来自动加载它们。

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

在 psr-0 和 psr-4 中,我们通过将 autoload 的 psr-0 或 psr-4 或类映射路径设置为供应商文件夹来配置 composer.json。执行转储自动加载,在您的 php 文件中包含单个生成的 autoload.php 和“使用”“命名空间”的 psr-4 约定,据说可以让我们的生活更轻松(事实并非如此)。

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

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

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

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

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

【问题讨论】:

  • 因为你通常只会说include_once 'otherFile.php'; ?
  • @rabbit,伙计,你知道 include_once 认真做什么吗?我认为,我们已经很好地通过了 composer.json 的自动加载文件 _autload(),spl_autoload_register() 中的 include_once 阶段。
  • 老兄,你在上面发帖说你想知道如何做某事,你给出了零代码,你甚至没有发布你该死的代码来显示你在做什么,然后有人建议使用 include_once 和你攻击了他们。然后你坐在那里想知道为什么人们不帮助你。
  • "为什么 PHP [加载类] 不像 Java?"嗯,我不知道,也许是因为[剥]橙子就像[剥]苹果一样?

标签: java php import spl-autoload-register psr-4


【解决方案1】:

原来如此。

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

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

但是,include_once 仍然是加载类的有效方法,如果您问我,这通常是最好的方法,而且(不是 Java 开发人员)我认为它与 Java 中的等效方法一样简单。

【讨论】:

  • 哈哈。谢谢。我的问题真的很菜鸟。我想@rabbit 已经回答了。但我没听懂他说的。现在你说得很清楚了。对不起兔子。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
  • 2021-11-21
  • 1970-01-01
  • 2011-02-06
  • 2014-03-13
  • 2011-03-27
  • 1970-01-01
相关资源
最近更新 更多