PHP中__autoload与smarty3冲突的解决方法

今天更新了smarty到3.0,结果发现项目中的__autoload()不能用了,

作为一个刚学习PHP 的菜鸟新手,搞了半天才明白问题出在它俩的冲突上,郁闷了好几天。后通过查看,Smarty3.0 中的SMARTY2_BC_NOTES文件,得 知Smarty3.0跟php的__autoload()有冲突:

——————————————————————————-——-

== Autoloader ==

Smarty 3 does register its own autoloader with spl_autoload_register. If your code has

an existing __autoload function then this function must be explicitly registered on

the __autoload stack. See http://us3.php.net/manual/en/function.spl-autoload-register.php

for further details.

——————————— —————————————————————

解决办法是使用spl_autoload_register()注册自己的加载类。

现在给出配置前后的代码:

————————————————————————————————————

  if(substr($className, -6)=="Action"){
   include(APP_CLASS_PATH.'Action/'.$className.".class.php");
  }elseif(substr($className, -5)=="Model"){
   include(APP_CLASS_PATH.'Model/'.$className.".class.php");
  }elseif($className=="Smarty"){
   require_once NET_ROOT."Smarty/Smarty.class.php";
  }elseif(substr($className, -6)=="Public"){
 include(APP_CLASS_PATH.'Public/'.$className.".class.php");
  }
 ——————————————————————————————   

class ClassAutoloader {
 public function __construct() {
  spl_autoload_register(array($this, 'loader'));
 }
 private function loader($className) {
  if(substr($className, -6)=="Action"){
   echo '1';
   include(APP_CLASS_PATH.'Action/'.$className.".class.php");
  }elseif(substr($className, -5)=="Model"){
   echo '2';
   include(APP_CLASS_PATH.'Model/'.$className.".class.php");
  }elseif($className=="Smarty"){
   echo '3';
   require_once NET_ROOT."Smarty/Smarty.class.php";
  }elseif(substr($className, -6)=="Public"){
   echo '4';
   include(APP_CLASS_PATH.'Public/'.$className.".class.php");
  }
 }
}
$autoloader = new ClassAutoloader();

希望能帮助遇到此问题的朋友,让大家少走弯路。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索php
, class
, include
, smarty
, classname
, autoload
, elseif
, _autoload
, __autoload
, Smarty3
__autoload()
php autoload 冲突、phpstorm 解决git冲突、phpstorm 解决冲突、ip冲突的巧妙解决方法、hash冲突解决方法,以便于您获取更多的相关知识。

时间: 2024-10-24 17:06:56

PHP中__autoload与smarty3冲突的解决方法的相关文章

PHP针对常规模板引擎中与CSS/JSON冲突的解决方法_php技巧

本文实例讲述了PHP针对常规模板引擎中与CSS/JSON冲突的解决方法,有一定的实用价值,具体分析如下: 本文主要针对对象为Smarty与Dwoo 在Smarty中经常会出现和CSS/JS的语法存在冲突的情况,因为二者都需要使用大括号{}.虽然可以改Smarty的界定符,但你在一个现存系统中,去修改所有相关代码,是不划算的.解决方法如下: 1. 避免同时出现 通过外部引用的方式避免.问题是避无所避.所以这种情况只适合少量简单的情况. 2. 修改Smarty界定符 3.可以使用Smarty的lit

android中view手势滑动冲突的解决方法_Android

Android手势事件的冲突跟点击事件的分发过程息息相关,由三个重要的方法来共同完成,分别是:dispatchTouchEvent.onInterceptTouchEvent和onTouchEvent. public boolean dispatchTouchEvent(MotionEvent ev) 这个方法用来进行事件的分发.如果事件传递到view,那么这个方法一定会被调用,返回结果受当前View的onTouchEvent和下级View的dispatchTouchEvent方法的影响,表示是

Android中DrawerLayout+ViewPager滑动冲突的解决方法

DrawerLayout 是 Android 官方的侧滑菜单控件,而 ViewPager 相信大家都很熟悉了.今天这里就讲一下当在 DrawerLayout 中嵌套 ViewPager 时,要如何解决滑动冲突的问题,效果如下: 首先,让我们先来解决 DrawerLayout 和 ViewPager 的侧滑事件冲突.当 DrawerLayout 中嵌套 ViewPager 时,侧滑默认是执行 DrawerLayout 的侧滑事件,因为 Android 的事件分发是从 外层 ViewGroup 向里

JQuery中的ready函数冲突的解决方法_jquery

一个aspx页面通常可以包含其它ascx控件,如果在多人协同开发的情况下:程序员小张在控件A.ascx中使用了 $().ready(function{}),而程序员小王又在控件B.ascx中也使用了ready函数,程序员小李在做页面时,把A.ascx,B.ascx都拖到自己的页面中,然后在页面中也需要用到$().ready函数,这下好了: 虽然jQuery本身的设计还算不错,document加载完成后会依次触发各个ready中定义的function(这一点很好,不象javascript中默认后面

PHP中__autoload和Smarty冲突的简单解决方法_php实例

本文讲述了PHP中__autoload和Smarty冲突的简单解决方法.分享给大家供大家参考,具体如下: 一.问题: 最近,在项目中发现,PHP 的 __autoload 方法失效了.调试了好久,百思不得其解,查了下资料才知道原来是 Smarty 的原因.新版的 Smarty 改变了autoload的方式. 二.解决方法: 在 Smarty 的包含类文件后加一段代码,spl_autoload_register("__autoload"); 如下: <?php define('RO

ThinkPHP和UCenter接口冲突的解决方法_php实例

本文分析了ThinkPHP和UCenter接口冲突的解决方法.分享给大家供大家参考,具体如下: 1.引出问题: 在UCenter中存在db和base两个类,恰巧这两个类也存在于ThinkPHP中,因此出现问题是必然的事情. db类:uc_client/lib/db.class.php base类:uc_client/model/base.php 2.问题解决方法: 只要消除"重名"即可解决,因此选择更改UCenter中的名称. 3.实际操作方法: db类: 更改db.class.php

模板视图和AngularJS之间冲突的解决方法_AngularJS

本文实例讲述了模板视图和AngularJS之间冲突的解决方法.分享给大家供大家参考,具体如下: 问题: 在php的mvc视图中,我们需要在加载的过程中 传递一些数据给模板: 如: 这里是某个 controller $data['users'] = {something from databases}; $this->load->view('home/index',$data); 这里是对应的视图 <div ng-controller="loadData"> &l

jQuery多个版本和其他js库冲突的解决方法_jquery

jQuery多个版本或和其他js库冲突主要是常用的$符号的问题,这个问题 jquery早早就有给我们预留处理方法了,下面一起来看看解决办法. 1.同一页面jQuery多个版本或冲突解决方法. <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>jQuery测试页</title> </head>

ThinkPHP和UCenter接口冲突的解决方法

本文分析了ThinkPHP和UCenter接口冲突的解决方法.分享给大家供大家参考,具体如下: 1.引出问题: 在UCenter中存在db和base两个类,恰巧这两个类也存在于ThinkPHP中,因此出现问题是必然的事情. db类:uc_client/lib/db.class.php base类:uc_client/model/base.php 2.问题解决方法: 只要消除"重名"即可解决,因此选择更改UCenter中的名称. 3.实际操作方法: db类: 更改db.class.php