PHP类自动加载

作者: codefine | 来源:发表于2017-02-20 00:03 被阅读386次

很多开发者写面向对象的应用程序时对每个类的定义建立一个 PHP 源文件。一个很大的烦恼是不得不在每个脚本开头写一个长长的包含文件列表(每个类一个文件)。

PHP 为了解决自动加载,提供了几种方法。

  • __autoload
  • spl_register_autoload
  • composer

__autoload — 尝试加载未定义的类

在调用类的时候,如果类没有定义, 则尝试在__autoload() 定义中加载
此函数参数为 当前调用的类名。

__autoload() 只可以定义一次。

void __autoload ( string $class )
./myClass.php
<?php
class myClass {
    public function __construct() {
        echo "myClass init'ed successfuly!!!";
    }
}
?>

./index.php
<?php
// we've writen this code where we need
function __autoload($classname) {
    $filename = "./". $classname .".php";
    include_once($filename);
}

// we've called a class ***
$obj = new myClass();
?>


spl_autoload_register — 注册给定的函数作为 __autoload 的实现

spl_autoload_register() 可以创建多条autoload规则, 按定义的顺序逐个执行。

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

使用 Composer

Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们。

Composer 将这样为你解决问题:

a) 你有一个项目依赖于若干个库。

b) 其中一些库依赖于其他库。

c) 你声明你所依赖的东西。

d) Composer 会找出哪个版本的包需要安装,并安装它们(将它们下载到你的项目中)。

  • 全局安装
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
  • 声明依赖

在项目根目录创建 composer.json

{
    "require": {
        "monolog/monolog": "1.2.*"
    }
}

执行

composer install

或者 直接执行 composer require , 将安装或更新依赖

composer require "monolog/monolog 1.2.*"
  • 自动加载

当依赖包安装完成后, 会在/vendor 下生成autoload.php文件
此文件实现了包的自动加载。

require 'vendor/autoload.php';

autoload.php 自动加载的实现

/vendor/composer 目录下生成如下文件

vendor/composer
        ├── autoload_classmap.php
        ├── autoload_files.php
        ├── autoload_namespaces.php
        ├── autoload_psr4.php
        ├── autoload_real.php
        ├── autoload_static.php
        ├── ClassLoader.php
        ├── installed.json

autoload_real.php 中定义了加载类

查找和加载文件,依次从autoload_namespaces.phpautoload_psr4.php, autoload_classmap.php, autoload_files.php中定义的关系中尝试加载。

为什么会有autoload_*.php 这4个文件呢,因为这分别对应一种查找规则。详细说明:

autoload_namespaces.php - 加载命名空间

参考

相关文章

  • PHP 使用总结

    自动类加载 (auto-load) 自动类加载说白了就是自动 include / require php 文件,这...

  • 自己编写PHP框架需要考虑的部分

    1. MVC2. 自动加载: PHP: 自动加载类;3. 错误处理:http://php.net/manual/z...

  • PHP 懒加载哪些事儿

    PHP自动加载 此篇文章主要介绍加载的php类的方式,以及自动加载的几种模式;题外话:大家空了可以多看看别人写的框...

  • PHP Composer详解

    PHP composer php composer的作用 composer是如何实现类的自动加载 composer...

  • PHP类自动加载

    很多开发者写面向对象的应用程序时对每个类的定义建立一个 PHP 源文件。一个很大的烦恼是不得不在每个脚本开头写一个...

  • PHP面向对象之类的自动加载

    类的自动加载 含义: 当某行代码需要一个类的时候,php的内部机制可以做到“自动加载该类文件”,以满足该行需要一个...

  • 2022-03-13 保存表格

    1 加载autoload.php 载入composer自动加载文件使用命名空间里的类文件,(可以给类文件的命名空间...

  • PHP 常见设计模式

    DesignPattern_PHP PHP 基础设计模式学习,默认自动加载类 单例模式 一个类只允许实例化一次:如...

  • php类的自动加载

    本例尝试分别从MyClass1.php和MyClass2.php文件中加载MyClass1和MyClass2类。 ...

  • PHP类的自动加载

    1、为什么需要类的自动加载 很多开发者写面向对象的应用程序时,对每个类的定义,都建立一个独立的 PHP 源文件,方...

网友评论

本文标题:PHP类自动加载

本文链接:https://www.haomeiwen.com/subject/zfrswttx.html