如何加载php中的类,php中类的自动加载如何设计?

目前网上的自动加载有两种(自己见到的):

1、根据命名空间:

命名空间作为文件路径

2、根据配置文件:

路径映射

在写php框架,觉得框架中的类都只被用到一次,自动加载的话会出现多次new一个类,并且在代码中出现 new 又难以维护。我觉得自动加载不如自己用方法来new , 必要的还可以用单例。

各位大大在设计的时候是怎么处理的呢?

-------------update-12.11----------------

经过昨天的考虑,现在设计是这样的,自动加载用于静态class::func() 、new class()

这样的使用,需要单例的class(框架内部很多的class只需要new一次)调用其他的方法实例化

猜测:php中的加载过程像是这样的,当我们 new 一个class,php会寻找加载到内存中存在的class,如果class_exists 存在就省去调用自动加载函数,不存在则调用自动加载函数

回复内容:

目前网上的自动加载有两种(自己见到的):

1、根据命名空间:

命名空间作为文件路径

2、根据配置文件:

路径映射

在写php框架,觉得框架中的类都只被用到一次,自动加载的话会出现多次new一个类,并且在代码中出现 new 又难以维护。我觉得自动加载不如自己用方法来new , 必要的还可以用单例。

各位大大在设计的时候是怎么处理的呢?

-------------update-12.11----------------

经过昨天的考虑,现在设计是这样的,自动加载用于静态class::func() 、new class()

这样的使用,需要单例的class(框架内部很多的class只需要new一次)调用其他的方法实例化

猜测:php中的加载过程像是这样的,当我们 new 一个class,php会寻找加载到内存中存在的class,如果class_exists 存在就省去调用自动加载函数,不存在则调用自动加载函数

用PSR-4标准,大致相当于题主说的第一种

自动加载和new对象 单例 完全没有关系啊,自动加载是解决手动require麻烦,容易忘,难维护,_once效率低等问题的

基于namespace的spl加载,至于你说到的多次new,可以通过设计一个DI容器类解决

以下两个静态方法都是放在一个common.php里的

在typecho启动时,通过入口文件,载入配置,在配置中,执行function init()

public static function init()

{

/** 设置自动载入函数 */

if (function_exists('spl_autoload_register')) {

spl_autoload_register(array('Typecho_Common', '__autoLoad'));

} else {

function __autoLoad($className) {

Typecho_Common::__autoLoad($className);

}

}

public static function __autoLoad($className)

{

//把类名转换为文件目录

@include_once str_replace(array('\\', '_'), '/', $className) . '.php';

}

相关标签:php

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值