问题是这样的现在有两个组件他们都用到了spl_autoload_register和__autoload,于是出现了一个问题,其中一个的spl_autoload_register的class和函数不能使用了,因为对spl_autoload_register和__autoload不是很了解。。所以问题也说不了十分详细,现在就是希望两个组件的用spl_autoload_register的函数都能使用。请各位大哥帮帮忙,顺便对spl_autoload_register和__autoload也做个详细的解释,他两的功能我自己查了下资料大概了解了一些分不够会再加

解决方案 »

  1.   

    只说__autoload,另一个没用过,呵呵:
    首先是:
    网上资料<?php
    class Person {
       var $name, $age;
       function __construct ($name, $age)
       {
        $this->name = $name;
        $this->age = $age;
       }
    }
    ?>
    <?php
    function __autoload($classname) {
       require_once ($classname .".class.php");
    }$person = new Person(”Altair”, 6);
    var_dump ($person);
    ?>通常PHP5在使用一个类时,如果发现这个类没有加载,就会自动运行__autoload()函数,在这个函数中我们可以加载需要使用的类。在我们这个简单的例子中,我们直接将类名加上扩展名".class.php"构成了类文件名,然后使用require_once将其加载。从这个例子中,我们可以看出autoload至少要做三件事情,第一件事是根据类名确定类文件名,第二件事是确定类文件所在的磁盘路径(在我们的例子是最简单的情况,类与调用它们的PHP程序文件在同一个文件夹下),第三件事是将类从磁盘文件中加载到系统中。第三步最简单,只需要使用include/require即可。要实现第一步,第二步的功能,必须在开发时约定类名与磁盘文件的映射方法,只有这样我们才能根据类名找到它对应的磁盘文件。       因此,当有大量的类文件要包含的时候,我们只要确定相应的规则,然后在__autoload()函数中,将类名与实际的磁盘文件对应起来,就可以实现lazy loading的效果。从这里我们也可以看出__autoload()函数的实现中最重要的是类名与实际的磁盘文件映射规则的实现。然后那:
    我一般不会用,一般的类文件直接include进来就可以了,用__autoload()速度没直接快.
    像类名为:aa_bb_cc,其实类是在:aa/bb/cc.class.php中定义,那就觉得可以用__autoload来解决
      

  2.   

    嗯谢谢lgzxz999的解答我的问题是两个组件中都有function __autoload($classname) {
       require_once ($classname .".class.php");
    }这样的函数,他们对文件名的规则也不一样。
      

  3.   

    function __autoload($classname) {
       require_once ($classname .".class.php");
    }就这样来
      

  4.   

    看来是我没说清楚哎
    两个插件都使用了__autoload和spl_autoload_register来自加载类现在要将这两个插件放到同一个模板下面,于是我在模板的config文件中同时引用了这两个组件的config文件,于是便出现了,__autoload重复定义的问题,于是我加了判断function_exists('__autoload')来判断,如果存在我就用spl_autoload_register来导入另一个组建的自定义的__autoload函数,但是发现前一个组件也用了这个方法,如果在后面一个组件中使用spl_autoload_register的话,就会让前面加载的函数无效了(自己推断的)所以问题来了,我怎么样才能让后一个组件也能自动加载类呢  *另外两个组件的文件都很多*这两个烦人的东西是 S2CONTAINER_PHP5和DOMPDF急求解决方法!
      

  5.   

    问题解决了。。真是伤透脑筋这是具体的说明
    http://hi.baidu.com/jeakccc/blog/item/fb4d49c2473ed95cb319a8f2.html另外把解决的方法说一下希望能帮助到和我遇到一样问题的朋友如果 已经存在__autoload函数的时候
    如果再别的文件中再使用spl_autoload_register方法的话会使得原来的__autoload函数失效
    于是需要在使用spl_autoload_register之前加上这样的判断if (function_exists('__autoload')) {
        spl_autoload_register('__autoload');
    }
    另外感谢楼上两位的回答谢谢