聊聊mPHP之自动加载类函数(一)

[文章作者:磨延城 转载请注明原文出处: https://mo2g.com/view/30/ ]

很多时候,这些看似讲的很详尽的文字,反而让刚学习的朋友产生心里暗示,认为MVC很难掌握.一开始我也有这样的反应,后来我开始构思一个精简的MVC框架,就是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类';
    }
}
?>
<?php
/*
当前文件为 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();
*/
?>
<?php
/*
当前文件为 mPHP.php
声明类mPHP
*/
class mPHP {
    public function __construct() {
        echo '这是mPHP类';
    }
}
?>
<?php
/*
当前文件为 mo2g.php
声明类mPHP
*/
class mo2g {
    public function __construct() {
        echo '这是mo2g类';
    }
}
?>
<?php
/*
当前文件为 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) {}的神奇用法,把它理解了,距离成功,就更近一步了。

敬请期待,下一节——聊聊mPHP之控制器的秘密(二)

评论:

  1. 暂无评论...
  2. 我来说两句:

      切换  

    磨途歌检测发现,您当前使用的浏览器版本过低,要想使用画板模式,请先更新浏览器

      切换  

    磨途歌随机验证码