数码资讯
PHP自动加载模式集
加载文件模式: 1、正常荷载包括include_once,requice,requice_one 2、__autoload() 3、spl_autoload_register() 传统的加载方法 假设我们有一个类文件A.php,它定义了一个类命名: < PHP 类{ 公共功能__construct(
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
加载文件模式:
1、正常荷载包括include_once,requice,requice_one
2、__autoload()
3、spl_autoload_register()
传统的加载方法
假设我们有一个类文件A.php,它定义了一个类命名:
< PHP
类{
公共功能__construct(){
不是吗;
}
}
然后我们有一个编辑,需要使用类的一种,传统的写作方式
< PHP
要求('a.php);
美元=新的A();
但问题是,如果我们的index.php需要包含超过一个,它需要很多的课,所以我们要写很多行需要的报表,有时会让人感觉不好。
__autoload()自动加载
但在PHP5的版本,我们不需要它了。
在PHP5中,该__autoload函数被调用时自动尝试使用未定义的类,所以我们可以让PHP自动加载类的而不是写了一长串的包含文件__autoload功能写作。
例如,在上面的例子中,是可以这样写:
< PHP
功能__autoload(合班){
$;
如果(is_file(文件)){
require_once(文件);
}
}
美元=新的A();
当然,以上是最简单的演示。__autoload只是include_path找到类文件和加载。我们可以定义__autoload加载类的规则,根据他们的需求。注:由于__autoload()是一个函数,它只能存在一次。
spl_autoload_register()自动加载
但现在问题来了。如果我们需要在一个系统的实现使用许多其他的类库,这些类库可能由不同的开发人员编写的,和他们的类名称和实际磁盘文件的映射规则是不同的。如果我们想实现类的自动加载库文件,我们必须在__autoload实施所有的映射规则()的功能,使__autoload()函数可以很复杂甚至是不可能实现的。最后,它可能会导致__autoload()函数很臃肿。此时,即使可以实现,也会对未来的维护和系统效率带来很大的负面影响,在这种情况下,难道没有更简单、更明确的解决方案吗答案当然是否定的!
spl_autoload_register()满足了这种需求。它实际上创造autoload函数队列,这是一个接一个的执行顺序定义。相反,__autoload()只能被定义一次。
布尔spl_autoload_register($ autoload_function { bool {可赎回,把真正的bool = =美元,美元在假} } })
我们继续重写上面的示例:
< PHP
函数加载器($ Class){
$;
如果(is_file(文件)){
require_once(文件);
}
}
spl_autoload_register('loader);
美元=新的A();
或者直接使用匿名函数:
< PHP
spl_autoload_register(功能(文件){)
$;
如果(is_file(文件)){
require_once(文件);
}
});
美元=新的A();
这也可以正常运行,当PHP不叫__autoload当寻找一类,而是调用我们定义,装载机的功能。以同样的方式,下面的文字也可能。
< PHP
类装载器{
公共静态函数loadClass(合班){
$;
如果(is_file(文件)){
require_once(文件);
}
}
}
spl_autoload_register(阵列('loader ','loadclass '));
/ / spl_autoload_register(阵列(__class__,'loadclass '));
/ / spl_autoload_register(阵列($,'loadclass '));
美元=新的A();
更多的例子
autoload.php
< PHP
定义('sdk_path ',__dir__);
require_once sdk_path。' / / PHP的功能;
require_once sdk_path。' / /配置PHP的;
spl_autoload_register(功能(合班){)
如果(假)!= stripos(合班,'yjc 微信)){
require_once。__dir__。str_replace(directory_separator,substr ($,10)。'/library/loader.php');
}
});
*
功能__autoload(合班){
如果(假)!= stripos(合班,'yjc 微信)){
require_once。__dir__。str_replace(directory_separator,substr ($,10)。'/library/loader.php');
}
}
* /
建议养成习惯定义绝对地址sdk_path在输入文件,需要将不会错。
以上是本文的全部内容,希望能对大家有所帮助。
1、正常荷载包括include_once,requice,requice_one
2、__autoload()
3、spl_autoload_register()
传统的加载方法
假设我们有一个类文件A.php,它定义了一个类命名:
< PHP
类{
公共功能__construct(){
不是吗;
}
}
然后我们有一个编辑,需要使用类的一种,传统的写作方式
< PHP
要求('a.php);
美元=新的A();
但问题是,如果我们的index.php需要包含超过一个,它需要很多的课,所以我们要写很多行需要的报表,有时会让人感觉不好。
__autoload()自动加载
但在PHP5的版本,我们不需要它了。
在PHP5中,该__autoload函数被调用时自动尝试使用未定义的类,所以我们可以让PHP自动加载类的而不是写了一长串的包含文件__autoload功能写作。
例如,在上面的例子中,是可以这样写:
< PHP
功能__autoload(合班){
$;
如果(is_file(文件)){
require_once(文件);
}
}
美元=新的A();
当然,以上是最简单的演示。__autoload只是include_path找到类文件和加载。我们可以定义__autoload加载类的规则,根据他们的需求。注:由于__autoload()是一个函数,它只能存在一次。
spl_autoload_register()自动加载
但现在问题来了。如果我们需要在一个系统的实现使用许多其他的类库,这些类库可能由不同的开发人员编写的,和他们的类名称和实际磁盘文件的映射规则是不同的。如果我们想实现类的自动加载库文件,我们必须在__autoload实施所有的映射规则()的功能,使__autoload()函数可以很复杂甚至是不可能实现的。最后,它可能会导致__autoload()函数很臃肿。此时,即使可以实现,也会对未来的维护和系统效率带来很大的负面影响,在这种情况下,难道没有更简单、更明确的解决方案吗答案当然是否定的!
spl_autoload_register()满足了这种需求。它实际上创造autoload函数队列,这是一个接一个的执行顺序定义。相反,__autoload()只能被定义一次。
布尔spl_autoload_register($ autoload_function { bool {可赎回,把真正的bool = =美元,美元在假} } })
我们继续重写上面的示例:
< PHP
函数加载器($ Class){
$;
如果(is_file(文件)){
require_once(文件);
}
}
spl_autoload_register('loader);
美元=新的A();
或者直接使用匿名函数:
< PHP
spl_autoload_register(功能(文件){)
$;
如果(is_file(文件)){
require_once(文件);
}
});
美元=新的A();
这也可以正常运行,当PHP不叫__autoload当寻找一类,而是调用我们定义,装载机的功能。以同样的方式,下面的文字也可能。
< PHP
类装载器{
公共静态函数loadClass(合班){
$;
如果(is_file(文件)){
require_once(文件);
}
}
}
spl_autoload_register(阵列('loader ','loadclass '));
/ / spl_autoload_register(阵列(__class__,'loadclass '));
/ / spl_autoload_register(阵列($,'loadclass '));
美元=新的A();
更多的例子
autoload.php
< PHP
定义('sdk_path ',__dir__);
require_once sdk_path。' / / PHP的功能;
require_once sdk_path。' / /配置PHP的;
spl_autoload_register(功能(合班){)
如果(假)!= stripos(合班,'yjc 微信)){
require_once。__dir__。str_replace(directory_separator,substr ($,10)。'/library/loader.php');
}
});
*
功能__autoload(合班){
如果(假)!= stripos(合班,'yjc 微信)){
require_once。__dir__。str_replace(directory_separator,substr ($,10)。'/library/loader.php');
}
}
* /
建议养成习惯定义绝对地址sdk_path在输入文件,需要将不会错。
以上是本文的全部内容,希望能对大家有所帮助。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。