Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/238.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中使用自动加载是否不好?_Php_Oop_Autoload - Fatal编程技术网

在PHP中使用自动加载是否不好?

在PHP中使用自动加载是否不好?,php,oop,autoload,Php,Oop,Autoload,发件人: 在PHP5中,这不再是必需的。您可以定义一个函数,当您试图使用尚未定义的类/接口时,该函数将自动调用。通过调用此函数,脚本引擎可以在PHP出现错误之前加载该类 现在我想知道,仅仅使用\uu autoload在动态站点上加载适当的类是否是一种不好的做法 例如,我的站点的设置方式是将文件包括到index.php文件中 因此,如果我在我的网站的论坛部分或博客部分,我只希望加载适当的类和函数,所以我使用autoload,但我从不手动包含文件,我应该使用\uu autoload作为最后手段,还是

发件人:

在PHP5中,这不再是必需的。您可以定义一个函数,当您试图使用尚未定义的类/接口时,该函数将自动调用。通过调用此函数,脚本引擎可以在PHP出现错误之前加载该类

现在我想知道,仅仅使用
\uu autoload
在动态站点上加载适当的类是否是一种不好的做法

例如,我的站点的设置方式是将文件包括到
index.php
文件中


因此,如果我在我的网站的论坛部分或博客部分,我只希望加载适当的类和函数,所以我使用autoload,但我从不手动包含文件,我应该使用
\uu autoload
作为最后手段,还是即使在高流量系统上,我也做得很好?

不好?不是。
\uuuu autoload()
是我最喜欢的PHP5附加功能之一。它消除了手动包含/需要应用程序所需的类文件的责任(和烦恼)。也就是说,作为开发人员,您需要确保只加载“适当的类”。使用结构化的命名方案和目录结构可以很容易地做到这一点。关于如何正确使用uu autoload(),进行谷歌搜索,在线上有很多例子,你会发现大量信息。

自动加载是只加载所需类的好方法


在PHP5>=5.1.2中,旧的自动加载()的大部分问题都消失了,这要归功于。

对自动加载()的唯一危险是定义了一个糟糕的自动加载函数。通常,在PHP查找包含类的正确文件时,性能受到影响的只是一些磁盘搜索。好处是摆脱了所有那些恼人的
include()
调用

如果您担心这个级别的性能,那么您应该已经在使用操作码缓存,比如APC

现在我想知道,仅仅使用自动加载在动态站点上加载适当的类是一种不好的做法吗

一点也不。你可以依靠自动加载,你所需要做的就是设计一个好的命名约定并实现一个高效的自动加载程序

有一个主要的问题需要考虑。自动加载和Zend Guard不能很好地结合在一起,因为Zend Guard倾向于重命名东西,这意味着您决定使用的命名约定很可能不一样。如果您将使用Zend Guard(或任何其他模糊处理程序),您很可能被迫手动包含所有文件

以下是Zend Guard用户指南中的一段话:

自动加载类将不起作用,因为磁盘上的文件名将不起作用 匹配模糊的类名


我只是查看了引用的spl_autoload_register()页面,但我并不真正理解它,它是必要的还是只使用了基本的__autoload函数好吗?如果你想拥有多个自动加载器,你必须使用spl_autoload_register,如果不需要的话,_autoload会很好。spl_autoload_register()的主要卖点是类库可以定义自己的自动加载函数,而不会出现运行时错误,因为_autoload()定义了两次。是的,我已经在使用它了,我在问它是否是一个值得依赖的性能影响it@jason:你应该在你的问题中说清楚,因为您现在没有提到任何有关性能的内容。@musicfreak您是对的,但如果它对性能不好,那么如果性能更好,则很可能被视为“坏习惯”,因为您将文件包含推迟到最后一刻,因此,您还可以确保所包含的文件始终只有一次命中。
\uuu autoload()
从PHP7.2.0开始就被弃用。我目前已经使用autoload,但这是一个很好的观点,它不使用Zend Guard,我不使用它,但仍然很好地了解+1是的,我使用APC,我并不真的担心,我只是不想继续使用autoloader,如果期望它加载文件或将其用作备份是不好的,比如如果你忘记加载文件,谢谢你的信息