文件包含是否属于 PHP 的设计缺陷?

2018-10-16 14:55:39 +08:00
 gbin

require 和 include 仅仅是处理失败的方式不同,出错时 require 终止脚本运行,而 include 产生警告。 require 和 require_once 区别在于 require_once 在导入文件前会检查是否已经被导入。

我认为仅提供一个 require_once 就够了,不懂二者设计的初衷,有没有人给解释一下?


参考

1427 次点击
所在节点    问与答
10 条回复
ysc3839
2018-10-16 15:30:18 +08:00
仅提供一个 require_once,如果要多次导入该怎么办?
gbin
2018-10-16 15:32:59 +08:00
@ysc3839 多次导入不合理吧,一个文件只应该导入一次嘛
phpinfos
2018-10-16 15:36:18 +08:00
不仅仅属于 PHP 的问题,很多语言都有这样的问题。
ysc3839
2018-10-16 15:36:38 +08:00
@gbin 为什么不合理? PHP 文件里面可以直接写代码的,require 就会执行一次,把文件当函数执行挺合理的。
newtype0092
2018-10-16 15:36:41 +08:00
你的前两句不就回答了你后面的问题么?
脚本出错是终止报错还是抛异常继续执行,有的语言用启动参数实现,php 用不同关键字实现。
require 是覆盖还是非覆盖,有的语言只提供非覆盖,但提供清除缓存方法,php 用不同关键字实现。

include 也有 include_once。
WuwuGin
2018-10-16 15:38:30 +08:00
你觉得你用不到的就是设计失误了?
spicycoffee
2018-10-16 15:39:38 +08:00
newtype0092
2018-10-16 15:43:36 +08:00
@gbin #2
你 require 一个纯配置文件,运行过程中修改了某些配置,现在要重置,直接再 require 一次比解析文件一个一个赋值方便但多吧。
有些类在运行时修改了内部方法,可以再 require 一次恢复。
require 文件可以在运行过程中热更新代码。
类似的还有很多,算是脚本语言的特殊用法吧,不止 php 有,你只是见的少。
liuguang
2018-10-16 16:50:24 +08:00
早就不用这玩意了,都用 composer 自动加载了,唯一需要的也就是 include vendor/autoload.php
gbin
2018-10-16 17:18:47 +08:00
@liuguang 自动加载本质也要用 include/require 嘛

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/498132

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX