什么是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) {}的神奇用法,把它理解了,距离成功,就更近一步了。