ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

PHP文件的引入

2021-06-18 23:31:37  阅读:252  来源: 互联网

标签:文件 include require autoload spl 引入 PHP once


PHP文件的引入

要在一个 PHP 脚本中引入另一个 PHP 脚本中定义的代码(通常是函数或者类),
需要借助 include、require、include_once、require_once 等语句,

include 和 require 都可以通过指定路径引入一个 PHP 脚本,
区别是 include 没有找到对应路径脚本时发出警告(E_WARNING),
而 require 会抛出致命错误(E_COMPILE_ERROR)

include_once/require_once 也是用于引入指定路径 PHP 脚本,
与 include/require 的区别是如果指定路径已经包含过,
不会再次包含,只会包含一次同一路径脚本

include_once 和 require_once 的区别与 include/require 一样

使用 include_once/require_once 性能更好一些,
至于使用 include_once 还是 require_once,
取决于你对指定路径 PHP 脚本不存在的预期处理

自动加载类文件

觉得反复编写 require_once/include_once 语句太麻烦,

可借助 spl_auto_register 函数注册自动加载器,实现系统未定义类或接口的自动加载

bool spl_autoload_register ([ callable autoload_function
[,bool throw = true
[, bool $prepend = false ]]] )


//autoload_function  欲注册的自动装载函数。
//如果没有提供任何参数,则自动注册 autoload 的默认实现函数spl_autoload()。

//throw
// autoload_function 无法成功注册时,spl_autoload_register()是否抛出异常。

//prepend
//true,spl_autoload_register() 会添加函数到队列之首,而不是队列尾部。


//https://laravelacademy.org/post/21682

<?php
namespace App;
use App\Testing\Test as SubTest;

spl_autoload_register(function ($className) {
    $path = explode('\\', $className);
    if ($path[0] == 'App') {
        $base = __DIR__;
    }
    $filename = $path[count($path) - 1] . '.php';
    $filepath = $base;
    foreach ($path as $key => $val)
    {
        if ($key == 0 || $key == count($path) - 1) {
            continue;
        }
        $filepath .= DIRECTORY_SEPARATOR . strtolower($val);
    }
    $filepath .= DIRECTORY_SEPARATOR . $filename;
    require_once $filepath;
});

Test::print();
SubTest::print();

通过Composer管理命名空间

借助 PHP 的包管理工具 Composer 帮我们管理这种命名空间与目录路径的映射

标签:文件,include,require,autoload,spl,引入,PHP,once
来源: https://blog.csdn.net/hmmhxh/article/details/118035356

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有