Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP5自动装弹机SPL_自动装弹失败_Php_Oop_Autoload - Fatal编程技术网

PHP5自动装弹机SPL_自动装弹失败

PHP5自动装弹机SPL_自动装弹失败,php,oop,autoload,Php,Oop,Autoload,我将下面的代码作为一个自动加载类,但是clean方法似乎根本不起作用,它总是使用dirty方法 我是否错误地使用spl_自动加载?如果是这样,正确(更好)的方法是什么?这是否低效,如何改进 但是,当使用此方法时,我总是得到输出,例如底部,在某些情况下,它只是找不到类,但不会抛出任何错误。我将“显示错误”设置为1,并检查了错误日志,但完全丢失了 代码被初始化为 require "vendor/AutoLoader.class.php"; self::setGlobal("autoloader",

我将下面的代码作为一个自动加载类,但是
clean
方法似乎根本不起作用,它总是使用
dirty
方法

我是否错误地使用spl_自动加载?如果是这样,正确(更好)的方法是什么?这是否低效,如何改进

但是,当使用此方法时,我总是得到输出,例如底部,在某些情况下,它只是找不到类,但不会抛出任何错误。我将“显示错误”设置为1,并检查了错误日志,但完全丢失了

代码被初始化为

require "vendor/AutoLoader.class.php";
self::setGlobal("autoloader", AutoLoader::init());
课程安排如下:

public static $instance;
private $_src=array('vendor/', 'lib/', '');
private $_sub=array('base/', '');
private $_ext=array('.php', 'class.php', 'lib.php');

/* initialize the autoloader class */
public static function init(){
    if(self::$instance==NULL){
        self::$instance=new self();
    }
    return self::$instance;
}

/* put the custom functions in the autoload register when the class is initialized */
private function __construct(){
    spl_autoload_register(array($this, 'clean'));
    spl_autoload_register(array($this, 'dirty'));
}

/* the clean method to autoload the class without any includes, works in most cases */
private function clean($class){
    $class=str_replace('_', '/', $class);
    spl_autoload_extensions(implode(',', $this->_ext));
    foreach($this->_src as $resource){
      foreach($this->_sub as $sub){
        echo 'Trying to load ', $class, ' via ', __METHOD__, "()<br />";
        set_include_path(pegFramework::getGlobal("baseDir") . $resource.$sub);
        spl_autoload($class);
        if(class_exists($class)) {
          echo 'Found and clean included '.$class.' in '.$resource.$sub."<br />";
          break 2;
        }
      }
    }
}

/* the dirty method to autoload the class after including the php file containing the class */
private function dirty($class){
    global $docroot;
    $class=str_replace('_', '/', $class);
    foreach($this->_src as $resource){
        foreach($this->_ext as $ext){
          foreach($this->_sub as $sub){
            echo 'Trying to load ', $class, ' via ', __METHOD__, "()<br />";
            if(@include(pegFramework::getGlobal("baseDir") . $resource . $sub. $class . $ext)) {
              echo 'Found and dirty included '.$class.' as '.$resource . $sub. $class . $ext."<br />";
              break 3;
            }
          }
        }
    }
    spl_autoload($class);
}

我想是对
spl\u autoload
的调用绊倒了你。在委员会的评论中,我发现:

注意:此函数将其查找的类名小写,当它找不到Foo_Bar.php时,请不要混淆

因此,使用
pegFacebook
Facebook
调用
spl\u autoload
只会触发对名为
pegFacebook.php
Facebook.class.php
的文件的搜索


如果我是你的话,我会看看Symfony的例子,看看更简化的类加载处理。您可能会调整它以使用特定的扩展,但我至少会考虑找到一种新的方法来处理这个问题。

这真的很烦人。。。我希望他们选择改变它!
Trying to load pegDatabase via pegAutoloader::clean()
...snip...
Trying to load pegDatabase via pegAutoloader::clean()
Trying to load pegDatabase via pegAutoloader::dirty()
Trying to load pegDatabase via pegAutoloader::dirty()
Trying to load basepegDatabase via pegAutoloader::clean()
...snip...
Trying to load basepegDatabase via pegAutoloader::clean()
Trying to load basepegDatabase via pegAutoloader::dirty()
Found and dirty included basepegDatabase as vendor/base/basepegDatabase.php
Found and dirty included pegDatabase as vendor/pegDatabase.php
Trying to load pegRequest via pegAutoloader::clean()
...snip...
Trying to load pegRequest via pegAutoloader::clean()
Trying to load pegRequest via pegAutoloader::dirty()
Trying to load pegRequest via pegAutoloader::dirty()
Found and dirty included pegRequest as vendor/pegRequest.php
Trying to load pegFacebook via pegAutoloader::clean()
...snip...
Trying to load pegFacebook via pegAutoloader::clean()
Trying to load pegFacebook via pegAutoloader::dirty()
...snip...
Trying to load pegFacebook via pegAutoloader::dirty()
Trying to load Facebook via pegAutoloader::clean()
Trying to load Facebook via pegAutoloader::clean()
...snip...
Trying to load Facebook via pegAutoloader::dirty()
Trying to load Facebook via pegAutoloader::dirty()
Trying to load Facebook via pegAutoloader::dirty()
...snip...
Trying to load Facebook via pegAutoloader::dirty()
Trying to load Facebook via pegAutoloader::dirty()
...snip...
Trying to load Facebook via pegAutoloader::dirty()