V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
gbin
V2EX  ›  问与答

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

  •  
  •   gbin · 2018-10-16 14:55:39 +08:00 · 1482 次点击
    这是一个创建于 2230 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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


    参考

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

    include 也有 include_once。
    WuwuGin
        6
    WuwuGin  
       2018-10-16 15:38:30 +08:00
    你觉得你用不到的就是设计失误了?
    spicycoffee
        7
    spicycoffee  
       2018-10-16 15:39:38 +08:00   ❤️ 1
    newtype0092
        8
    newtype0092  
       2018-10-16 15:43:36 +08:00   ❤️ 1
    @gbin #2
    你 require 一个纯配置文件,运行过程中修改了某些配置,现在要重置,直接再 require 一次比解析文件一个一个赋值方便但多吧。
    有些类在运行时修改了内部方法,可以再 require 一次恢复。
    require 文件可以在运行过程中热更新代码。
    类似的还有很多,算是脚本语言的特殊用法吧,不止 php 有,你只是见的少。
    liuguang
        9
    liuguang  
       2018-10-16 16:50:24 +08:00
    早就不用这玩意了,都用 composer 自动加载了,唯一需要的也就是 include vendor/autoload.php
    gbin
        10
    gbin  
    OP
       2018-10-16 17:18:47 +08:00 via Android
    @liuguang 自动加载本质也要用 include/require 嘛
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2580 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 02:42 · PVG 10:42 · LAX 18:42 · JFK 21:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.