PHP 引用文件

前言

本文简记 PHP 引用文件的方式。

三者加载方式

  • incluce 在用到时加载。
  • require 在一开始就加载。
  • _once 后缀表示已加载的不加载。

require、include区别

require() 和 include() 语句是语言结构,不是真正的函数,可以像 php 中其他的语言结构一样,例如 echo() 可以使用 echo("ab") 形式,也可以使用 echo "abc" 形式输出字符串 abc。require() 和 include() 语句也可以不加圆括号而直接加参数。

文件引用方式

  • 对 include() 语句来说,在执行文件时每次都要进行读取和评估;
    而对于 require() 来说,文件只处理一次(实际上,文件内容替换 require() 语句)。这就意味着如果可能执行多次的代码,则使用 require() 效率比较高。
  • 另外一方面,如果每次执行代码时是读取不同的文件,或者有通过一组文件迭代的循环,就使用 include() 语句。

报错

  • include 引入文件的时候,如果碰到错误,会给出提示,并继续运行下边的代码。

    require 引入文件的时候,如果碰到错误,会给出提示,并停止运行下边的代码。

  • PHP 系统在加载PHP程序时有一个伪编译过程,可使程序运行速度加快。但 incluce 的文档仍为解释执行。include 的文件中出错了,主程序继续往下执行,require 的文件出错了,主程序也停了,所以包含的文件出错对系统影响不大的话(如界面文件)就用 include,否则用 require。

  • 示例:

    对不存在的 PHP 文件 no.php 进行引用。

    • include

      复制<?php
      include "no.php";
      echo 123;
      

      浏览器访问显示:

    复制    Warning: include(no.php): failed to open stream: No such file or directory in C:\Amber\LanguageProgram\Webstorm\202007\ideastaweb\html\test\require.php on line 2
    
        Warning: include(): Failed opening 'no.php' for inclusion (include_path='.;C:\php\pear') in C:\Amber\LanguageProgram\Webstorm\202007\ideastaweb\html\test\require.php on line 2
    123
    
    • require

      复制<?php
      require "no.php";
      echo 123;
      

      浏览器访问显示:

      复制Warning: require(no.php): failed to open stream: No such file or directory in C:\Amber\LanguageProgram\Webstorm\202007\ideastaweb\html\test\require.php on line 2
      
      Fatal error: require(): Failed opening required 'no.php' (include_path='.;C:\php\pear') in C:\Amber\LanguageProgram\Webstorm\202007\ideastaweb\html\test\require.php on line 2
      

require_once、include_once

  • include_once() 和 require_once() 语句也是在脚本执行期间包括运行指定文件。此行为和 include() 语句及 require() 类似,使用方法也一样。唯一区别是如果该文件中的代码已经被包括了,则不会再次包括。这两个语句应该用于在脚本执行期间,同一个文件有可能被包括超过一次的情况下,确保它只被包括一次,以避免函数重定义以及变量重新赋值等问题。

参考

作者:Yogile

出处:https://www.cnblogs.com/Yogile/p/13547386.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Yogile  阅读(276)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示
more_horiz
keyboard_arrow_up dark_mode palette
选择主题