【问题标题】:SPL autoloader class auto creating new objectsSPL 自动加载器类自动创建新对象
【发布时间】:2012-01-21 04:41:42
【问题描述】:

我将通过 SPL 自动加载器调用创建新对象。 但是我无法创建已经被加载器包含的类的新对象。不知道为什么,但我不想使用 eval,我在哪里可以找到答案?对不起我的英语不好..

没什么奇怪的简单代码:

class load
{  public static function init()
    {return spl_autoload_register(array(__CLASS__, "hook"));}
    public static function quit()
    {return spl_autoload_unregister(array(__CLASS__, "hook"));}
    public static function hook($class)
    {   echo "CLASS IS:$class<br>";
        $lnk=PATH . str_replace("_", "/", $class) . ".php";
        ob_start();
        require $lnk;

        ob_clean();

    }
}

【问题讨论】:

  • 显示所有相关代码。否则就不可能说出你的问题出在哪里。
  • 那段代码确实很奇怪。如果您觉得需要捕获输出,则很可能您没有按预期使用类脚本。此外,您不会关闭打开的输出缓冲区级别。 -- 解释 eval 的想法应该是什么。
  • 需要添加ob_end_clean()吗?
  • 我正在使用子目录,这就是为什么这里是替换

标签: php eval spl


【解决方案1】:

自动加载器不是用来创建新对象的;它们用于包含新的类。一旦类存在,自动加载器就不需要再次加载它——事实上,它不能不触发致命错误(因为类不能被定义两次)。因此,它不会运行您可能还编写了一些其他副作用的类文件。

如果您想要一个新对象,只需使用new ClassYouWantToCreatAnInstanceOf 创建它。如果该类尚不存在,自动加载器将尝试加载它。但是由于您所看到的原因,类文件通常不应该自己创建实例。

【讨论】:

  • 表示无法将对象创建到 spl loader 中?甚至通过评估?或者其他一些方法,我需要它非常强大(
  • 您需要为工作使用正确的工具。为什么你想要一个类加载器来创建一个新对象? 真正的目标是什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-04
  • 1970-01-01
  • 2010-12-15
  • 2010-12-07
  • 2013-07-19
  • 1970-01-01
  • 2014-12-07
相关资源
最近更新 更多