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

 更新时间:2021-11-14 18:47:04   作者:佚名   我要评论(0)

1、打开相应的PHP代码文件。
2、添加“$class = str_replace("\\","/",$class);”代码即可。
文件在本地win系统下测试无异常,代码如下:


f

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

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

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

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 才可行, 文件路径需要将 \ 转义成 /,因此添加一行代码即可。

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

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

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()作用一样,不过此时可以应对更多的情形

//注册用于自动加载的函数
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';
  }
}

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

项目场景应用

//自动加载
//控制器类 模型类 核心类
//对于所有的类分为可以确定的类以及可以扩展的类
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类自动加载失败的解决办法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • PHP类的自动加载与命名空间用法实例分析
  • PHP类的自动加载机制实现方法分析
  • php类的自动加载操作实例详解
  • php类自动加载器实现方法
  • 解析php类的注册与自动加载

相关文章

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

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

    1、打开相应的PHP代码文件。 2、添加“$class = str_replace("\\","/",$class);”代码即可。 文件在本地win系统下测试无异常,代码如下: f
    2021-11-14
  • PHP Class self 与 static 异同与使用详解

    PHP Class self 与 static 异同与使用详解

    对于大多数 PHPer 来说,self 与 static 两个 PHP 关键词都不算陌生。我们学会通过self::xxxx这种方式来调用当前类的静态属性和方法。而 sta
    2021-11-14
  • 聊聊PHP中删除字符串的逗号和尾部斜杠的方法

    聊聊PHP中删除字符串的逗号和尾部斜杠的方法

    正如标题所述,本文将给大家通过两个示例来介绍PHP删除字符串中的逗号以及尾部斜杠的方法,感兴趣的朋友咱们一起继续往下看吧~ 下面我们通过
    2021-11-14
  • php访问对象中的成员的实例方法

    php访问对象中的成员的实例方法

    对象是由成员属性和成员方法构成的,想要访问对象成员的话,实际上有点像访问数组中的元素,既然有点像的话,通过对象的引用来访问对象的成员
    2021-11-14
  • php如何处理setcookie失效的问题

    php如何处理setcookie失效的问题

    1、浏览器开启cookie。 2、删除在setcookie()之前的任何HTTP头部输出。 3、使用php的setcookie()来创建cookie即可。 使用php的setcookie()来
    2021-11-14
  • php实例化对象的实例方法

    php实例化对象的实例方法

    想要将类实例化成对象,只是多了一个简单的小步骤,需要使用new关键字并且在后面加上一个和类名同名的方法就可以了。表明一个新的对象。 需要
    2021-11-14
  • 聊聊PHP中die()和sleep()函数的用法

    聊聊PHP中die()和sleep()函数的用法

    在上一篇《聊聊PHP中删除字符串的逗号和尾部斜杠的方法》给大家介绍了PHP删除字符串中的逗号以及尾部斜杠的方法,感兴趣的朋友可以去学习了解
    2021-11-14
  • php png失真的原因及解决办法

    php png失真的原因及解决办法

    1、创建一个PHP示例文件。 2、创建一个和背景图片一样大小的真彩色画布。 3、复制背景图片。 4、通过“imagecreatefrompng”合成png图片即可
    2021-11-14
  • Laravel框架实现点播上传阿里云功能

    Laravel框架实现点播上传阿里云功能

    1、确认框架中安装了第三方alibabacoud控件 实现代码如下 上传过程中遇到任务问题,可以进行留言 <&#63;php namespace App\Api\xxxx\Con
    2021-11-14
  • 聊聊PHP中的 === 运算符为什么比 == 快

    聊聊PHP中的 === 运算符为什么比 == 快

    在上一篇《聊聊PHP中require_once()函数为什么不好用》中给大家介绍了PHP中require_once()为什么不好用的原因,感兴趣的朋友可以去阅读了解一
    2021-11-14

最新评论