php命名空间自动加载:如何使用composer的autoload来实现自动加载

伊谢尔伦
发布: 2017-05-22 11:22:01
原创
5274人浏览过

在 php5 以后的版本中可以定义一个 __autoload() 函数,当调用一个未定义的类的时候就会启动此函数,从而在抛出错误之前做最后的补救,不过这个函数的本意已经被完全曲解使用了,现在都用来做自动加载。后来这个函数实际上已经不被推荐使用了,相反,现在应当使用 spl_autoload_register() 来注册类的自动加载函数。前面我们介绍了php命名空间的基本知识,使用方法,作用等等,这一节就重点来说说php命名空间自动加载。

spl_autoload_register() 的语法格式如下:

bool spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] )
登录后复制

autoload_function 是需要注册的自动装载函数,如果此项为空,则会注册 spl_autoload 函数,

throw 此参数设置了 autoload_function 无法成功注册时, spl_autoload_register() 是否抛出异常。

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

立即学习PHP免费学习笔记(深入)”;

上面提到了 spl_autoload 函数,实际上注册函数的规范就应当遵循此函数,函数声明如下:

void spl_autoload ( string $class_name [, string $file_extensions ] )
登录后复制

由于这个函数默认实现是通过 C 语言,所以这里给出一个 PHP 语言的实现规范。

其实例代码如下:

<?php
// 自定义类
define('CLASS_DIR', 'class/');
// 添加类的路径
set_include_path(get_include_path().PATH_SEPARATOR.CLASS_DIR);
// 使用自动加载添加类
spl_autoload_extensions('.class.php');
// 默认加载
spl_autoload_register();
?>
登录后复制

大致上就和这个是类似的。实际上命名空间和自动加载类的结合就基本是通过路径形式。

使用composer的autoload来自动加载

composer的出现真是让人们眼前一亮,web开发从此变成了一件很“好玩”的事情,开发一个CMS就像在搭积木,从packagist中取出“ 积木 ”搭建在自己的代码中,一点一点搭建出一个属于自己的王国。

使用composer基本就可以抛弃了require和include函数,一个项目中,这两个函数只可能出现一次,那就是 require '../vendor/autoload.php'。

然后就可以非常方便的去使用第三方的类库了,是不是感觉很棒啊!对于我们需要的monolog,就可以这样用了:

use MonologLogger;
use MonologHandlerStreamHandler;
// 创建日志
$log = new Logger('name');
$log->pushHandler(new StreamHandler('/path/to/log/log_name.log', Logger::WARNING));
// 将记录添加到日志
$log->addWarning('Foo');
$log->addError('Bar');
登录后复制

在这个过程中,Composer做了什么呢?它生成了一个autoloader,再根据各个包自己的autoload配置,从而帮我们进行自动加载的工作。

实现方式的步骤:

1. 先安装composer,可以参照php依赖管理工具composer入门教程

2. 在项目根目录创建composer.json文件,写入代码

{
    "type": "project",
    "autoload": {
        "psr-4": {
            "Admin\": "admin/"
        }
    }
}
登录后复制

3. 在项目根目录打开命令,写入命令

composer update
登录后复制

4.等待执行完成。安装成功后,会在项目根目录下新建一个"/vendor/"文件夹。

说明:使用之前需要require一下"/vendor/autoload.php"文件。

$autoLoadFilePath = dirname($_SERVER['DOCUMENT_ROOT']).DIRECTORY_SEPARATOR.'vendor'.DIRECTORY_SEPARATOR.'autoload.php';
require_once $autoLoadFilePath;
登录后复制

5. 在"/admin/"目录下新建test.php文件,文件内容如下

<?php
namespace Admin;
class test
{
   public function sayHi()
   {
       echo 'hi';
   }
}
?>
登录后复制

 在"/public/"目录下新建index.php文件,文件内容如下

<?php
//装载自动加载函数
$autoLoadFilePath = dirname($_SERVER['DOCUMENT_ROOT']).DIRECTORY_SEPARATOR.'vendor'.DIRECTORY_SEPARATOR.'autoload.php';
require_once $autoLoadFilePath;
$test = new Admin	est();
$test->sayHi();
?>
登录后复制

6. 配置apache,访问路径,得到如下的结果就表示成功。

171.png

【相关教程推荐】

1. 《php.cn独孤九贱(4)-php视频教程

2.  视频教程:命名空间:我们虽然同名同性,但却属于不同时空

3.  php编程从入门到精通全套教程

以上就是php命名空间自动加载:如何使用composer的autoload来实现自动加载的详细内容,更多请关注php中文网其它相关文章!

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号