PHP如何及时加载一个类,【php】如何设计一个php自动加载类

┡┈▓ libralies

┊ ┡┈▓ database

┊ ┊ ┡┈▓ driver

┊ ┊ ┊ ┡┈▒ mysql.php

┊ ┊ ┊ ┡┈▒ mysqli.php

┊ ┊ ┊ ┗┈▒ sqlite.php

┊ ┊ ┡┈▓ query

┊ ┊ ┊ ┡┈▒ mysql.php

┊ ┊ ┊ ┡┈▒ mysqli.php

┊ ┊ ┊ ┗┈▒ sqlite.php

┊ ┊ ┡┈▒ driver.php

┊ ┊ ┗┈▒ query.php

┊ ┟┈▓ session

┊ ┊ ┟┈▓ storage

┊ ┊ ┊ ┟┈▒ database.php

┊ ┊ ┊ ┟┈▒ mamcache.php

┊ ┊ ┊ ┗┈▒ none.php

┊ ┊ ┗┈▒ storage.php

┊ ┡┈▒ database.php

┊ ┡┈▒ session.php

这样的文件结构,怎样设计一个自动加载类,在实例化类的时候按需加载相的应类

回答

建议你看一下 Zend Framework 的设计和 PSR 标准。

Autoloader 的设计可以参考 ZF1 和 ZF2 的 Autoloader 或者 Composer 的 Autoloader。

方法1(简单粗暴)

把你想能自动加载的类的目录添加到自动加载目录中

参考这里

set_include_path('libralies/database/driver' . PATH_SEPARATOR . get_include_path());

...

方法2(推荐)

根据目录或者命名空间自动加载

参考这里

function __autoload(){

$dir = './libralies';

set_include_path(get_include_path(). PATH_SEPARATOR. $dir);

$class = str_replace('\\', '/', $class) . '.php';

require_once($class);

}

这种方法需要你在创建类的时候通过命名空间方式

如:

$a = new Libralies\Databases\Driver\Mysql;

__autoload函数会把它转化成相对路径然后导入

spl_autoload //php的框架自动加载基本上都是通过这个实现的。

这是我在一个项目中的做法:

function core_autoload($class_name) {

$prefix = substr($class_name,0,2);

switch($prefix){

case 'm_':

$file_name = ROOT_PATH . '/app/models/' . substr($class_name, 2) . '.php';

break;

case 'a_':

$file_name = ROOT_PATH . '/app/actions/' . substr($class_name, 2) . '.php';

break;

case 'u_':

$file_name = ROOT_PATH . '/app/lib/usr/' . substr($class_name, 2) . '.php';

break;

default:

$file_name = get_include_path() . str_replace('_', '/', $class_name).'.php';

}

if( file_exists($file_name) )

require_once $file_name;

else spl_autoload($class_name);

}

spl_autoload_register('core_autoload');

自动加载 + 命名空间, 这是几乎所有开源框架所用的方式。

相关知识

Composer

命名空间

Psr-0

Psr-4

建义看下composer的实现

composer 就可以实现,为啥还要自己开发?

小弟采用的是文件名和类名相同的加载方式!望笑纳

可以看看symfony的自动类加载,超级赞。退而其次看thinkphp

使用spl_autoload_register函数注册类加载函数,类名根据路径名以_相隔

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值