言午月月鸟
编程,带娃以及思考人生
首页
编程
带娃
思考人生
编程画图秀
PHP系统解析-资源加载
dingusxp
1851
### 说明 > 此处的资源 专指以 PHP代码实现的类库、函数库封装。即不包括C实现的扩展,配置类文件等。 ### 加载方法 常规的是 include 系列,即 require/require_once,include/include_once 四个方法。 一些说明: - 加载方式:include与require每次调用都会正常加载;require_once 与 include_once 相同资源只加载一次。 - 加载失败:include 与 include_once 加载失败会报警告,require 与 require_once 则报致命错误。 - 查找路径: 当只有文件名,即没有指定任何相对或绝对路径目录时,会从当前文件夹及include_path 设置的文件夹中查找对应文件。实践上一般都用绝对路径引用。 - 上下文:被引用文件,可以使用引用语句所处上下文中的变量。 - 返回值: 这几个语句(注:可以写成函数形式,但是不是函数)是有返回值的。加载文件成功时,返回1或者被加载文件主动return的值,失败时返回false。 小范例: ```PHP // a.php sayHello(), PHP_EOL; // 注册一个特殊的加载规则 // 此处示例仅为了展示一些特性,不具有实用意义 spl_autoload_register(function($className) { echo 'try autoload: '.$className, PHP_EOL; if (substr($className, 0, 5) == 'test\\') { include_once __DIR__.'/'.strtolower(str_replace('\\', '_', $className)).'.php'; } }); $b = new \test\B(); echo $b->sayHello(), PHP_EOL; ``` ### PSR规范 PSR关于自动加载的规范是 [PSR-4 Autoloader](https://www.php-fig.org/psr/psr-4/)(还有一个PSR-0,目前已废弃)。 PSR的文档描述有点绕,试着理一下:(仅供参考,请以官方文档为准) 如: 引用的`完整类名`,如: \dingusxp\lib\RedisCache 配置的`命名空间前缀`,如: \dingusxp\lib 命名空间对应的`资源库目录`,如: ./redis-cache/src 则: 实际将加载的文件位置为 `资源库目录`+ (`完整类名` 除去 `命名空间前缀` 的部分) + ".php"后缀,即: ./redis-cache/src/RedisCache.php ### composer composer 提供了PHP的项目依赖管理解决方案,他支持PSR-0,PSR-4,以及手动配置资源文件等多种方式。当然,如非必要,建议只使用符合PSR-4规范的包。 结合composer配置,可以更好理解PSR-4规范。 假设我提供了一个叫 redis-cache 的composer包(其实真提供了,详见: ),其目录为: ```text src - RedisCache.php test composer.json ``` RedisCache.php 文件内容: ```PHP
粤ICP备19051469号-1
Copyright©dingusxp.com - All Rights Reserved
Template by
OS Templates