【问题标题】:Autoloading doesn't work with variable自动加载不适用于变量
【发布时间】:2014-01-24 23:37:55
【问题描述】:

我想用一个变量自动加载一个类,但它不起作用。有人可以帮帮我吗? 我有一个包含 A 类的文件夹 foo 和一个包含 5 个类(B 类、C 类……)的子文件夹 subfoo

在 A 类中,我想使用这些类,当我这样做时:

$obj = new classB(); 

一切正常。 当我这样做时:

$name = 'ClassB';
$obj = new $name();

它有效。当我将 B 类从子文件夹移动到 foo 文件夹时,第二个脚本也可以工作。

谁能帮帮我?

【问题讨论】:

  • 那么自动加载器怎么知道它应该在foo/subfoo而不是foo中寻找类文件?
  • 我不知道,我想它会自动执行吗?自动加载器如何知道在第一个代码 sn-p 中查找 foo/subfoo 而不是 /foo?我该如何解决这个问题?
  • I don't know, I touhgt it would do it automaticly? :)
  • 自动加载器是一段代码;你从哪里得到你的自动装载机?自动加载器的代码是什么?你在使用命名空间吗?
  • @DainisAbols - 我喜欢automagically我自己这个词

标签: php variables namespaces autoload


【解决方案1】:

在这种情况下,我认为这不是您实例化对象的方式,而是您如何自动加载类。

在这一点上,我假设您知道php's ability to let you autoload classes。如果你不这样做,那么我需要知道你有什么设置(框架?任何帮助类?),因为那可能会为你做自动加载。

您似乎需要配置自动加载功能。

这是我认为您的自动加载功能的基本示例:

function my_autoloader($class) {

    $file = $class . '.class.php'; // E.g. ClassB.class.php

    if(file_exists($file)) {
        require_once($file);
    }

}

spl_autoload_register('my_autoloader');

在这种情况下,它会检查当前工作目录以查看文件{$class}.class.php 是否存在。

在上面的场景中,您提到您将类移动到子目录subfoo。 因此,您需要更改您的自动加载器函数以反映新的子目录,因为 PHP 不会考虑深入查看目录结构,除非您告诉它:

    $file = 'subfoo/' . $class . '.class.php'; // Same E.g. will now look for subfoo/ClassB.class.php

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-14
    • 2017-11-09
    • 2019-04-28
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    相关资源
    最近更新 更多