首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >好代码还是坏代码?还是“秘密理由”?

好代码还是坏代码?还是“秘密理由”?
EN

Software Engineering用户
提问于 2013-10-06 10:58:10
回答 2查看 741关注 0票数 0

我想这个密码是:

代码语言:javascript
复制
if(file_exists("amodule.inc.php")) 
    require_once("amodule.inc.php");  

由于require_once的使用而产生误导。

我认为--为了使逻辑和“措辞”保持一致-- "include_once“是恰当的(如果有一些论点根本不使用"if”,但我想集中讨论“要求vs包括”)。

就我的理解而言,“要求”和“包括”之间的唯一区别是,如果文件不存在,则要求有结果(停止),而只包含一个警告。

但是,在本例中,如果文件不存在,require_once代码无论如何都不会执行。因此,“要求”在我看来是个误导。

从表面上看,可以认为上面的代码使用了require_once和

代码语言:javascript
复制
if(file_exists("amodule.inc.php")) 
    include_once("amodule.inc.php");

在我看来是“相同的”什么不是。因为:

“粗略”分析(如项目的自动检查)会抛出一条消息,即"amodule.inc.php“是一个重要的项目文件,而代码显示的情况并非如此。

此外,在执行"if“语句和require_once语句之间的cas (不太可能)中,可以删除文件。更糟糕的是,代码不会像预期的那样执行(在没有加载的情况下运行),而是放弃了。

那么,你们会怎么争论呢?

EN

回答 2

Software Engineering用户

发布于 2013-10-06 14:33:35

关于第一个区别,你是对的。Include和require是相同的,但是如果缺少文件,require将停止程序运行,而include将继续运行并显示错误。

来自PHP手册的

requireinclude相同,除非失败,否则也会产生致命的E_COMPILE_ERROR级别错误。换句话说,它将停止脚本,而include只发出一个允许脚本继续的警告(E_WARNING)。

因此,如果您有大量的参数,那么,是的,include_once会更好,但如果没有看到代码,它将取决于您想要发生什么,如果文件丢失了。

票数 3
EN

Software Engineering用户

发布于 2013-10-08 08:34:16

文件存在的事实并不意味着它是可读的,这是第一个问题:

http://php.net/manual/en/function.is-readable.php

包括发生的其他一些奇怪的事情,例如:

http://php.net/file_存在

警告此函数对于由于安全模式限制而无法访问的文件返回FALSE。但是,如果这些文件位于safe_mode_include_dir中,则仍然可以包含它们。

因此,检查file_exists是最著名的,但可能不是最正确的方法,以确定您是否可以包括一个文件。

这似乎是正确的解决办法:

http://php.net/stream_解决_包括_路径

根据与fopen()/ include相同的规则解析包含路径的文件名。

这将真正检查您是否可以包含该文件。

然后:如果你需要它:是的,在大多数情况下。如果类文件存在且可包含在加载之外,则应成功加载。如果php文件无法正确加载,在我看来,服务器/软件存在一个大问题,我们称之为致命问题。因此,对我们来说,使用require_once是有效的。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/213713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档