php 之 类的自动加载
来源:互联网 发布:网络安全教育文章 编辑:程序博客网 时间:2024/06/08 17:37
- 引出自动加载
- 自动加载的简单实现
- 在引入HumanModel类的问题上我们就可以这样实现
- 补充说明
- 自动加载只能用__autoload函数吗
引出自动加载
我们有一个HumanModel.php,里面的代码如下:
class HumanModel { public function t() { echo '人类'; }}
当我们要在别的php文件中使用HumanModel类的时候:
require('./HumanModel.php');$lisi = new HumanModel();$lisi->t();
问题:
如果网站比较大,model类比较多
HumanModel、UserModel、GoodsModel
CatModel、OrderModel
1:这么多的model,我用谁,就得include/require谁.
2:而且不知道,之前是否已经include/require进来某个类
(这个用once可以解决,但once的效率很低)
这时 我们可以用自动加载!
自动加载的简单实现
function __autoload($c) { echo '~~~~',$c,'~~~~~';}$ming = new Pig();
运行这段代码,
说明:
如果调用某个不存在的类,
在报错之前,
我们还有一次介入机会 __autoload函数
系统会调用__autoload()函数,
并把”类名”自动传给__autoload函数
我们自然可以在__autoload里 加载需要的类!
在引入HumanModel类的问题上,我们就可以这样实现
function __autoload($c) { echo '我先自动加载'; echo './' . $c . '.php'; echo '<br />'; require('./' . $c . '.php');}$lisi = new HumanModel();$lisi->t();
运行:
补充说明
有人会觉的require引入的文件,就相当与把源文件中的内容黏贴到了此处,那此处就相当于在__autoload()的方法中定义了HumanModel类,这样可以吗?
回答:可以
function test() { // 函数内可以写任何合法的PHP代码,包含再声明一个函数/类 echo '来'; class Bird { public static function sing() { echo '百灵鸟儿放声唱!'; } } echo '去';}Bird::sing(); // Class 'Bird' not found
为什么出错呢?
因为:test()函数还没有执行了
function test() { // 函数内可以写任何合法的PHP代码,包含再声明一个函数/类 echo '来'; class Bird { public static function sing() { echo '百灵鸟儿放声唱!'; } } echo '去';}test();Bird::sing();
自动加载只能用__autoload函数吗?
答:不是的,其实也可以指定一个函数
比如 我们就用zidongjiazai()函数
注意:要通知系统,让系统知道–我自己写了一个自动加载方法,用这个!
怎么通知: 用系统函数 spl_auto_register
*/
// 下面这句话,是把zidongjiazai函数注册成为”自动加载函数”;
spl_autoload_register('zidongjiazai');function zidongjiazai($c) { echo '我引入了./' . $c . '.php','<br />'; require('./' . $c . '.php');}$HumanModel = new HumanModel();$HumanModel->t();
/**
__autoload 是一个函数
我能自己注册一个自动加载函数
能否注册类的一个静态方法 当 自动加载函数?
TP里这么做的
0 0
- php 之 类的自动加载
- PHP之自动加载
- php之自动加载
- PHP类的自动加载
- php的自动加载类
- php类的自动加载
- PHP类的自动加载
- PHP类的自动加载
- php手册之自动加载类
- PHP的自动加载
- PHP自动加载之spl_autoload_register()
- php之自动加载autoload
- php 自动加载类
- PHP自动加载类
- PHP 自动加载类
- PHP 自动加载类
- PHP 类自动加载
- PHP自动加载类
- django学习---urls配置
- 电路与Multisim 串联电路(基础)
- 函数的声明、定义与函数的编译、链接
- 文件系统--php基础最详细教程
- Linux命令之"sed"
- php 之 类的自动加载
- Android View MarqueeView 跑马灯效果
- iOS - OS X 内存管理
- SQLi Labs Stacked Injections ( Lesson38 - Lesson53 )
- ajax
- (?:pattern) (?=pattern) (?!pattern)
- JQuery 的选择器可谓之强大无比
- 计算几何资料、
- javaScript中的异常