php加载php,PHP类自动加载

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

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

__autoload

spl_register_autoload

composer

__autoload — 尝试加载未定义的类

在调用类的时候,如果类没有定义, 则尝试在__autoload() 定义中加载

此函数参数为 当前调用的类名。

__autoload() 只可以定义一次。

void __autoload ( string $class )

./myClass.php

class myClass {

public function __construct() {

echo "myClass init'ed successfuly!!!";

}

}

?>

./index.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.php、autoload_psr4.php, autoload_classmap.php, autoload_files.php中定义的关系中尝试加载。

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

autoload_namespaces.php - 加载命名空间

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值