php类的加载过程,聊聊mPHP之自动加载类函数(一)

什么是MVC?MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,紧接着的是更飘渺的文字介绍。

很多时候,这些看似讲的很详尽的文字,反而让刚学习的朋友产生心里暗示,认为MVC很难掌握。一开始磨途歌也有这样的反应,后来我开始构思一个精简的MVC框架,就是mPHP最初的原型,把程序的逻辑代码写了一边,虽然调试的过程很繁琐,但运行成功后,整个人就豁然开朗了。

在此,请先忘掉那些MVC的定义,跟着我慢慢往下学习,成功的捷径是一步一个脚印。

下面先介绍分析mPHP框架用到的原生技术。

第一节:function __autoload($className) {},这是PHP自动加载类的一个关键技术,先看以下代码。

例一)类声明与类调用都写在一个PHP文件里:<?php

class mPHP {

public function __construct() {

echo '这是mPHP类';

}

}

$objMPHP = new mPHP();//会输出    这是mPHP类

?>

例二)类声明与调用分别写在不同的PHP文件:<?php

/*

当前文件为mPHP.php

声明类mPHP

*/

class mPHP {

public function __construct() {

echo '这是mPHP类';

}

}

?>

/*

当前文件为 index.php,与mPHP.php在同一目录下

必须加载声明类mPHP的PHP文件,才能通过 new mPHP()来创建类a的实例

*/

include 'mPHP.php';

$objMPHP = new mPHP();//会输出    这是mPHP类

?>

例三)类声明与调用分别写在不同的PHP文件,通过function __autoload($className) {}调用:<?php

/*

当前文件为 autoload.php

本例中的自动加载类文件规则

*/

function __autoload($className) {

include "{$className}.php";

}

/*

简单说明如下:

$objMPHP = new mPHP();

当没有找到类mPHP的声明,PHP会把mPHP当成参数传递给现有的function __autoload($className) {}

然后再次尝试声明该类,在不考虑性能的前提下,它等效于下边的语句

include "mPHP.php";

$objMPHP = new mPHP();

*/

?>

/*

当前文件为 mPHP.php

声明类mPHP

*/

class mPHP {

public function __construct() {

echo '这是mPHP类';

}

}

?>

/*

当前文件为 mo2g.php

声明类mPHP

*/

class mo2g {

public function __construct() {

echo '这是mo2g类';

}

}

?>

/*

当前文件为 index.php,与autoload.php,mPHP.php,mo2g.php在同一目录下

通过在function __autoload($className) {}中设置的规则加载相应的类文件

*/

include 'autoload.php';

$objMPHP = new mPHP();//会输出    这是mPHP类

$objMO2G = new mo2g();//会输出    这是mo2g类

/*

经过分析,很容易看出,上边3行代码等价于

include 'mPHP.php';

$objMPHP = new mPHP();

include 'mo2g.php';

$objMPHP = new mo2g();

*/

?>

__autoload的用法很有意思,只要把加载文件的规则定好,当类文件多起来,也很方便管理,虽然__autoload浪费了一些性能,但是我觉得完全可以接受。

本小结介绍了,function __autoload($className) {}的神奇用法,把它理解了,距离成功,就更近一步了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值