2013-03-15 77 views
5

自PHP 4开始,我已经开始构建自己的代码库。我已经使用require_once来导入类。现在在PHP 5.3中,我遇到了定义名称空间并导入它们。导入命名空间与包含PHP中的文件

我想更改我的源文件以使用导入(use语句)而不是使用require_once。这是正确的决定,我不确定。

我想这很容易。在类文件顶部定义名称空间并执行搜索&替换使用它们的其他文件(将require_once替换为use)。在练习中可能会出现什么问题?

而且会有性能改善吗?在包含文件时,PHP很明显是如何找到该文件的。但是在导入命名空间时,它并不那么明显。在搜索命名空间和使用PHP编制索引时是否会出现性能损失?

回答

16

userequire_once是完全不同的东西。 use根本没有做任何文件导入。 use只是让你的生活更轻松。相反,每一次写作Full\Path\To\Class的,你可以做

use Full\Path\To\Class 

$bar = new Class(); 

你仍然负责包括正确的文件。

不用手动加载所有文件,您可以依靠PHP auto class loading

您可以使用Composer或者像Symfony 2Zend2这样的框架来处理所有自动加载的东西。

迁移现有代码以使用自动加载和use语句而不是include_once可能非常耗时。很可能没有搜索和替换解决方案。

+0

谢谢,我没有注意到自动类加载。然而,这听起来像一个不好的做法,只能用解释器语言来实现。它增加了开销,如搜索类的整个路径,并导致不良文档,你不知道哪个文件使用什么。 – bkilinc 2013-03-15 18:05:23

+0

我从来没有看到任何性能问题,因为auf auto class loading。如果你使用上述工具,你可以看到他们做了很多工作以确保查找速度快。毕竟Java在十多年来取得了这样的成功。最后但并非最不重要的:依靠include/class加载的简单规则可以大大简化代码。 – BetaRide 2013-03-16 05:53:50

+0

@bkilinc:PSR-0等标准允许您在整个应用程序中使用自动加载的一致规则。如果整个图书馆使用相同的标准,则可以为您的整个应用程序使用单个自动加载器。这允许您编写非常模块化的OOP代码,而不必担心依赖关系,同时将性能开销降至最低。 – 2014-07-23 12:38:45