php自动加载的两种实现方法_php技巧

php自动载方法有两种.
第一种方案用__autoload,这个函数较简单,也较弱.
但有一问题没有解决, 就是在include前判断文件是否存在的问题.

复制代码 代码如下:

set_include_path('aa' . PATH_SEPARATOR . get_include_path());
function __autoload($className)
{
//如果加这个检测, 因为此文件不在当前目录下,它就会检测不到文件存在,
//但include是能成功的
if (file_exists($className . '.php')) {
  include_once($className . '.php');
} else {
exit('no file');
}
}
$a = new Acls();

第二种方案用spl自动加载,这里具体说一下这个.
spl_autoload_register()
一个简单的例子

复制代码 代码如下:

set_include_path('aa' . PATH_SEPARATOR . get_include_path());
//function __autoload($className)
//{
// if (file_exists($className . '.php')) {
// include_once($className . '.php');
// } else {
// exit('no file');
// }
//}
spl_autoload_register();
$a = new Acls();

spl_autoload_register()会自动先调用spl_autoload()在路径中查找具有小写文件名的".php"程序.默认查找的扩展名还有".ini",还可以用spl_autoload_extenstions()注册扩展名.
在找不到的清况下,还可以通过自己定义函数查找

function loader1($class)
{
//自己写一些加载的代码
}
function loader2($class)
{
//当loader1()找不到时,我来找
}
spl_autoload_register('loader1');
spl_autoload_register('loader2');
还可以更多........
MVC框架是如何实现自动加载的
首先设置路径
'include' => array( 'application/catalog/controllers', 'application/catalog/models', ),$include = array('application/controllers', 'application/models', 'application/library');
set_include_path(get_include_path() . PATH_SEPARATOR .implode(PATH_SEPARATOR, $config['include']));
在获取URL,解析出控制器与方法.
然后设置自动加载

复制代码 代码如下:

class Loader
{
/**
* 自动加载类
* @param $class 类名
*/
public static function autoload($class)
{
$path = '';
$path = str_replace('_', '/', $class) . '.php';
include_once($path);
}
}
/**
* sql自动加载
*/
spl_autoload_register(array('Loader', 'autoload'));

路由,实例化控制器,调用方法,你写的东西就开始执行了

复制代码 代码如下:

/**
* 路由
*/
public function route()
{
if (class_exists($this->getController())) {
$rc = new ReflectionClass($this->getController());
if ($rc->hasMethod($this->getAction())) {
$controller = $rc->newInstance();
$method = $rc->getMethod($this->getAction());
$method->invoke($controller);
} else
throw new Exception('no action');
} else
throw new Exception('no controller');
}

初步的自动加载就完成了

时间: 2024-09-08 23:55:18

php自动加载的两种实现方法_php技巧的相关文章

PHP面向对象自动加载机制原理与用法分析_php技巧

本文实例讲述了PHP面向对象自动加载机制原理与用法.分享给大家供大家参考,具体如下: 在学习PHP的面向对象的时候,会知道很多"语法糖",也就是魔术方法.有一个加自动加载的魔术方法,叫:__autoload(); 先看一段代码 <?php function __autoload($classname) { $filename = "./". $classname .".php"; include_once($filename); } new

php命令行(cli)模式下报require 加载路径错误的解决方法_php技巧

今天,同事突然告诉我,我写的一个做计划任务的php脚本执行总是不成功. 脚本本身很简单,里面只有包含了几个库文件并执行了一个函数,函数应该没有错误,这个函数在别处也调用过,没有问题.我在本地用浏览器访问页面,执行成功,看来没有问题,我有点怀疑是同事的计划任务的问题.我又打开命令行,用php直接执行脚本,这回报错了,是require 包含文件错误,看来是路径不对. 不明白是什么原因引起的,只是从报错来看是路径不对,我猜测是跟相对路径有关,于是把相对路径的全部改成绝对路径,再执行,问题解决. 在百度

php文件上传的两种实现方法_php技巧

文件上传一般有下面2种方式: 有两种: 1.标准input表单方式,典型的用$_FILES进行接收: 2.以Base64的方式进行传送,一般是AJAX异步上传. 第一种 标准的input表单方式,适用于大文件进行上传,同时支持批量.html代码关键的几句: <form enctype="multipart/form-data" method="post" action="upload.php""> <input typ

php 下载保存文件保存到本地的两种实现方法_php技巧

第一种: <?php function downfile() { $filename=realpath("resume.html"); //文件名 $date=date("Ymd-H:i:m"); Header( "Content-type: application/octet-stream "); Header( "Accept-Ranges: bytes "); Header( "Accept-Length

javascript firefox 自动加载iframe 自动调整高宽示例_javascript技巧

iframe 自动获取onload高宽 复制代码 代码如下: function AutoResize(iframe) { //firefox if(iframe.contentWindow) { iframe.height = iframe.contentWindow.document.documentElement.scrollHeight; iframe.width = iframe.contentWindow.document.documentElement.scrollWidth; }

ionic由于使用了header和subheader导致被遮挡的问题的两种解决方法_javascript技巧

这是一个小bug,解决方法有两种:根据做的东西不同选择不同的 <ion-nav-bar class="bar-positive"> <ion-nav-back-button class="button-icon ion-arrow-left-c"> </ion-nav-back-button> <h2>helloafds</h2> </ion-nav-bar> <ion-header-ba

js的form表单提交url传参数(包含+等特殊字符)的两种解决方法_javascript技巧

方法一:(伪装form表单提交) linkredwin = function(A,B,C,D,E,F,G){ var formredwin = document.createElement("form"); formredwin.method = 'POST'; document.body.appendChild(formredwin); formredwin.action = "http://www.A.com/A.wiki?A=" +encodeURI(A) +

codeigniter中实现一次性加载多个view的方法_php实例

本文实例讲述了codeigniter中实现一次性加载多个view的方法.分享给大家供大家参考.具体如下: function somecontrollerfunction() { $data['pagetitle'] = "Welcome to jb51.net"; $this->load->view('pageheader', $data); $this->load->view('pagenav'); $this->load->view('pagec

JavaScript 动态加载脚本和样式的方法_javascript技巧

一 动态脚本 当网站需求变大,脚本的需求也逐步变大;我们不得不引入太多的JS脚本而降低了整站的性能; 所以就出现了动态脚本的概念,在适时的时候加载相应的脚本; 1.动态引入js文件 var flag = true; if(flag){ loadScript('browserdetect.js'); // 调用函数,引入路径; } function loadScript(url){ var script = document.createElement('script'); // 创建script