php类自动加载失败的处理方案及实例代码

admin3年前PHP教程49

1、打开相应的PHP代码文件。

2、添加“$class = str_replace("\\","/",$class);”代码即可。

文件在本地win系统下测试无异常,代码如下:

?

1
2
3
4
5
6
function stu_autoload($class){
    if(file_exists($class.".php")){        require ( $class.".php");
    }else{        die("unable to autoload Class $class");
    }
}
spl_autoload_register("stu_autoload");






部署到Ubuntu服务器上异常,报错为 unable to autoload Class xxxxxx

解决方案

根据报错,发现 $class 的值需要形如 stuApp\dao\StuInfo 才可行, 文件路径需要将 \ 转义成 /,因此添加一行代码即可。

?

1
$class = str_replace("\\","/",$class);






综上,修改后的自动加载代码如下:

?

1
2
3
4
5
6
7
function stu_autoload($class){
    //路径转义
    $class = str_replace("\\","/",$class);    if(file_exists($class.".php")){        require ( $class.".php");
    }else{        die("unable to autoload Class $class");
    }
}
spl_autoload_register("stu_autoload");






知识点扩充:

类的自动加载

在外面的页面中,并不需要去引入类文件,但程序会在需要一个类的时候自动去“动态加载”该类。

① 创建一个对象的时候new

② 直接使用一个类名(操作静态属性与方法)

使用spl_autoload_register()

用它注册(声明)多个可以代替__autoload()作用的函数,自然也得去定义这些函数,并且函数的作用跟__autoload()作用一样,不过此时可以应对更多的情形

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//注册用于自动加载的函数
spl_autoload_register("model");
spl_autoload_register("controll");
//分别定义两个函数
function model($name){
  $file = './model/'.$name.'.class.php';
  if(file_exists($file)){
    require './model/'.$name.'.class.php';
  }
}
//如果需要一个类,但当前页面还没加载该类
//就会依次调用model()和controll(),直到找到该类文件加载,否则就报错
function controll($name){
  $file = './controll/'.$name.'.class.php';
  if(file_exists($file)){
    require './controll/'.$name.'.class.php';
  }
}






?

1
2
3
4
5
6
7
//若注册的是方法而不是函数,则需要使用数组
spl_autoload_register(
  //非静态方法
  array($this,'model'),
  //静态方法
  array(__CLASS__,'controller')
);






项目场景应用

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//自动加载
//控制器类 模型类 核心类
//对于所有的类分为可以确定的类以及可以扩展的类
spl_autoload_register('autoLoad');
//先处理确定的框架核心类
function autoLoad($name){
  //类名与类文件映射数组
  $framework_class_list = array(
    'mySqldb' => './framework/mySqldb.class.php'
  );
  if(isset($framework_class_list[$name])){
    require $framework_class_list[$name];
  }elseif(substr($name,-10)=='Controller'){
    require './application/'.PLATFORM.'/controller/'.$name.'.class.php';
  }elseif(substr($name,-6)=='Modele'){
    require './application/'.PLATFORM.'/modele/'.$name.'.class.php';
  }
}






到此这篇关于php类自动加载失败的处理方案及实例代码的文章就介绍到这了,更多相关php类自动加载失败的解决办法内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:py/php/jiaocheng/33918

免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

PHP中最低级别的错误类型总结

序言:php错误就是会使脚本运行不正常的情况。php的错误有很多种,包括warning、notice、deprecated、fetal error等。其中notice不叫通知,而叫通知级别的错误,wa...

网络被攻击了怎么办?租用美国BGP高防物理机哪家好?

主流的服务器攻击方式有多种手段,但是唯独DDoS攻击、CC攻击以及ARP欺骗,这些攻击方式被称为三大攻击手段,不仅可以致使服务器瘫痪,而且还很无解。DDOS攻击DDoS攻击全名叫做分布式拒绝服务(DD...

美国站群服务器租赁要注意哪些事项

美国站群服务器租赁要注意哪些事项?1、美国站群服务器技术服务美国站群服务器提供商一般都会标榜自己是7x24小时服务,大家可以在晚上找个时段往打个电话过往或者找一下他们的技术qq和提交问题,查一下岗,如...

免备案台湾服务器租用的优势

免备案台湾服务器租用的优势?免备案台湾服务器租用的优势主要有以下几点:无需备案:对于一些需要传输海外的内容或者是对备案限制较为严格的网站来说,选择免备案的台湾服务器可以避免复杂的备案流程和不确定的审核...

php是前端还是后端(php语法)

php是前端还是后端“php是后端语言。因为php是一种通用开源脚本语言,是在服务器端执行的脚本语言,服务器端是属于后端的。当然,PHP的功能不止于输出页面,还有逻辑层,服务层和DAO,或许还有读写文...

江苏高防服务器如何安全有效防御DDOS攻击

江苏高防服务器如何安全有效防御DDOS攻击?DDoS(分布式拒绝服务攻击)是一种非常常见的网络攻击方式,它的目的是通过同时向一个网络资源发送大量的请求,以致于让该资源无法响应正常的请求。以下是几种江苏...