__autoload用法
__autoload()是实现了一个自动加载的功能;
当你去实例化一个未声明的类时,会自动调用__autoload()方法;
如果new时,该类已经声明,__autoload()方法不执行;
__autoload()方法被系统自动调用时,收到一个一个参数,值为类名!
|
<?php
// HumanModel类
class
HumanModel {
public
function t()
{
echo
'人类';
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
<?php
require('./HumanModel.php');
$lisi
= new
HumanModel();
$lisi->t();
//人类
/*
如上,没有require引入进来时,报错
手动require进来
如果网站比较大,model类比较多,如何自动加载进来?
HumanModel
UserModel
GoodsModel
CatModel
OrderModel
...
1:这么多的model,我用谁,就得include/require谁.
2:而且不知道,之前是否已经include/require进来某个类
(这个用once可以解决,但once的效率很低)
这时 我们可以用自动加载!
*/
echo
'<br />';
function
__autoload($c)
{
echo
'~~~~',$c,'~~~~~';
}
$ming
= new
Pig();
//~~~~Pig~~~~~
//( ! ) Fatal error: Class 'Pig' not found in D:\wamp\www\1115\05.php on line 45
/*
如果调用某个不存在的类,
在报错之前,
我们还有一次介入机会 __autoload函数
系统会调用__autoload()函数,
并把"类名"自动传给__autoload函数
我们自然可以在__autoload里 加载需要的类!
见下页
*/
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?php
/***
__autoload用法
__autoload()是实现了一个自动加载的功能;
当你去实例化一个为声明的类时,会自动调用__autoload()方法;
如果new时,该类已经声明,__autoload()方法不执行;
__autoload()方法被系统自动调用时,收到一个一个参数,值为类名!
***/
function
__autoload($c)
{
echo
'我先自动加载';
echo
'./' .
$c .
'.php';
echo
'<br />';
require('./'
. $c
. '.php');
}
$lisi
= new
HumanModel();
$lisi->t();
/*我先自动加载./HumanModel.php
人类*/
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
<?php
/***
====笔记部分====
***/
function
test()
{
// 函数内可以写任何合法的PHP代码,包含再声明一个函数/类
echo
'来';
class
Bird {
public
static function
sing()
{
echo
'百灵鸟儿放声唱!';
}
}
echo
'去';
}
// Bird::sing(); // Class 'Bird' not found
test();
//函数要调用才能执行!
Bird::sing();
//来去百灵鸟儿放声唱!
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
<?php
/***
====自定义函数注册成为"自动加载函数"====
-------->自动加载只能用__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里这么做的,自己解决 :)
|